gpt4 book ai didi

python - 对序列号应用 pandas groupby 以从每列中获取单个值

转载 作者:行者123 更新时间:2023-11-30 22:11:36 28 4
gpt4 key购买 nike

我有一个看起来像 -

的数据框
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

我想根据 SERIAL 将此数据框分组,且值不包含 NA

它应该看起来像这样 -

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

我写的代码是 -

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() 

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

最佳答案

我认为需要GroupBy.first如果每个组和列只有一个非 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

另一个更通用的解决方案是每组向前和向后填充缺失值,然后 drop_duplicates按所有列::

df = df.replace('NA',np.nan)
df = df.groupby(['SERIAL']).apply(lambda x: x.ffill().bfill()).drop_duplicates()

关于python - 对序列号应用 pandas groupby 以从每列中获取单个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51374595/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com