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

时间:2019-09-10 23:57:05

标签: python pandas-groupby

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

我尝试在“容器”列(以及总和和其他列)上使用groupby,但它仅将第一行作为输出。

我对python和pandas非常陌生。不确定这样做是否正确。 一些较细微的问题的答案对于我来说太高级了。 我只是想知道我是否可以仅用2/3行编码获得输出。

4 个答案:

答案 0 :(得分:0)

我相信您可以像下面这样groupbysumdropna会丢弃NaN中的DataFrame /空值。

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

将熊猫作为pd导入

df = pd.DataFrame({'id':['aaa','aaa','bbb','ccc','bbb','NaN','NaN','aaa','NaN' ],                   'values':[1,2,3,4,5,6,7,8,9]})

df

对于范围(len(df))中的i:

if df.iloc[i,0] == "NaN":

    df.iloc[i,0] = df.iloc[i-1,0]

df.groupby('id')。sum()

答案 3 :(得分:0)

与您在“输出数据框”中显示的结果完全相同:原始数据框“容器”列中的第一个“ NaN”值必须替换为相应的立即上限值。我添加了更多的“ NaN”值作为示例:

原始DataFrame:

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”值的“容器”列:

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