您好我有以下数据框:
>df1
code item01 item02 item03 item04 item05
0 1111 nan nan nan nan 440
1 1111 nan nan nan 650 nan
2 1111 nan nan nan nan nan
3 1111 nan nan nan nan nan
4 1111 32 nan nan nan nan
5 1111 nan nan nan nan nan
6 1111 nan nan nan nan nan
7 1111 nan nan nan nan nan
8 1111 nan nan nan nan nan
9 1111 nan nan nan nan nan
10 1111 nan nan nan nan nan
11 2222 20 nan nan nan nan
12 2222 nan nan nan nan nan
13 2222 nan nan nan 5 nan
14 2222 nan 7 nan nan nan
15 2222 nan nan nan nan nan
16 2222 nan nan nan nan nan
如何使用数据框中的“code”列合并dv2而不使用for循环或iterrows()。
>df2
code item01 item02 item03 item04 item05
0 1111 32 130 nan 650 440
1 2222 20 7 nan 5 nan
答案 0 :(得分:1)
您可以使用:
如果每组最多只有一列非值:
df.groupby('code').first()
如果可能有多个值 - 更一般的解决方案:
cols = df.columns.difference(['code'])
df = df.groupby('code')[cols]
.apply(lambda x: x.apply(lambda y: pd.Series(y.dropna().values)))
print (df)
item01 item02 item03 item04 item05
code
1111 0 32.0 NaN NaN 650.0 440.0
2222 0 20.0 7.0 NaN 5.0 NaN
答案 1 :(得分:0)
您可以简单地使用groupby:
df1.groupby('code').max().reset_index(drop=True,inplace=True)
请注意,如果具有相同代码的项目有很多值,那么您将保留最大值。
reset_index仅用于以相同格式获取输出数据帧。