在序列号上应用pandas groupby从每个列中获取单个值

2024-09-24 04:23:43 发布

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

我有一个数据帧看起来像-

SERIAL COUNTRY      GOODS   VALUE
1      AUSTRALIA    NA      NA
1      NA           STEEL   NA
1      NA           NA      PACIFIC
2      NEW ZEALAND  NA      NA
2      NA           STEEL   NA
2      NA           NA      COAL
3      INDIA        NA      NA
3      NA           WOOL    NA  
3      NA           NA     LIMITED

我想根据串行用不包含NA的值对这个数据帧进行分组。在

应该是这样的-

^{pr2}$

我写的代码是-

new_df =df.groupby(['SERIAL'])['COUNTRY'].apply(lambda x: x if x is not 'NA') 

我也试过把它做成一个用逗号隔开的字符串,后来又把它们分开,但没用。在

df.groupby(['SERIAL'])['COUNTRY'].apply(lambda x: ','.join(x.unique().astype(str))).reset_index() 

有人能帮我解决这个问题吗,或者至少告诉我我方法中的错误。在


Tags: 数据lambdadfnewvalueserialcountryapply
1条回答
网友
1楼 · 发布于 2024-09-24 04:23:43

我认为需要^{}如果对于每个组和列只有一个非NaN值:

#if necessary repalce NA to missing values 
df = df.replace('NA',np.nan)
df = df.groupby(['SERIAL'], as_index=False).first()
print (df)
   SERIAL      COUNTRY  GOODS    VALUE
0       1    AUSTRALIA  STEEL  PACIFIC
1       2  NEW ZEALAND  STEEL     COAL
2       3        INDIA   WOOL  LIMITED

另一个更一般的解决方案是按组向前和向后填充缺少的值,然后按所有列^{}: 公司名称:

^{pr2}$

相关问题 更多 >