如何在groupby列中使用具有nan值的groupby

2024-09-29 02:25:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下数据帧: Original Dataframe 我想要以下输出: output Dataframe

我曾尝试在“Container”列(以及sum和其他列)上使用groupby,但它只给出第一行作为输出

我对Python和熊猫很陌生。不确定我做的是否正确。 一些更苗条的问题的答案太超前了,我无法理解。 我只是想知道,如果我能得到的输出只有2/3行的编码


Tags: 数据答案dataframe编码outputcontainersumgroupby
3条回答

预期结果与您显示为“Output Dataframe”的结果完全相同:原始Dataframe的“Container”列中的第一个“NaN”值必须替换为相应的立即上限值。我添加了更多“NaN”值来举例说明:

原始数据帧:

df
       Container   SB No  Pkgs  CBM  Weight
257  CXRU1219452  195375  1650   65   23000
259  BEAU4883430  140801    26    3     575
260          NaN  140868    60    8    1153
261          NaN  140824    11    1     197
262          NaN  140851   253   32    4793
263          NaN  140645    14    1     278
264          NaN  140723     5    0      71
265          NaN  140741     1    0      22
266          NaN  140768     5    0      93
268  SZLU9366565  189355  1800   65   23000
259  ZBCD1234567  100000   100   10    1000
260          NaN  100000   100   10    1000
261          NaN  100000   100   10    1000
262          NaN  100000   100   10    1000

按照[https://stackoverflow.com/a/27905350/6057650][1]的建议,将“fillna”函数与方法“ffill”一起使用

然后您将得到不带“NaN”值的“Container”列:

df=df.fillna(method='ffill')
df    
       Container   SB No  Pkgs  CBM  Weight
257  CXRU1219452  195375  1650   65   23000
259  BEAU4883430  140801    26    3     575
260  BEAU4883430  140868    60    8    1153
261  BEAU4883430  140824    11    1     197
262  BEAU4883430  140851   253   32    4793
263  BEAU4883430  140645    14    1     278
264  BEAU4883430  140723     5    0      71
265  BEAU4883430  140741     1    0      22
266  BEAU4883430  140768     5    0      93
268  SZLU9366565  189355  1800   65   23000
259  ZBCD1234567  100000   100   10    1000
260  ZBCD1234567  100000   100   10    1000
261  ZBCD1234567  100000   100   10    1000
262  ZBCD1234567  100000   100   10    1000

现在可以使用groupby获得预期的“Output DataFrame”:

df.groupby(['Container']).sum()

               SB No  Pkgs  CBM  Weight
Container                              
BEAU4883430  1126221   375   45    7182
CXRU1219452   195375  1650   65   23000
SZLU9366565   189355  1800   65   23000
ZBCD1234567   400000   400   40    4000
import pandas as pd

d =   [['CXRU',195, 1650,65,23000],
       ['BEAU',140, 26, 3, 575], 
       ['NaN', 140, 60 , 8, 1153]]
df=pd.DataFrame(mylist,columns=['Container','SB No', 'Pkgs', 'CBM','Weight'])
df

enter image description here

sel= df['Container']!='NaN'
df[sel]

enter image description here

我相信你可以groupbysum像下面这样。dropna将在DataFrame中删除NaN/空值

df.dropna().groupby(['Container']).sum()

相关问题 更多 >