python(pandas)在没有for循环的dataframe中合并

2024-09-27 22:16:11 发布

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

嗨,我有以下数据帧:

>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

在没有for loop或iterrows()的情况下,如何在dataframe中使用“code”列合并以获得df2。你知道吗

>df2
    code    item01  item02  item03  item04  item05
0   1111    32  130 nan 650 440
1   2222    20  7   nan 5   nan

Tags: 数据loopdataframefor情况codenandf1
2条回答

您只需使用groupby:

df1.groupby('code').max().reset_index(drop=True,inplace=True)

注意,如果一个项目有许多值具有相同的代码,这里将保留最大的值。你知道吗

reset\u索引仅用于获取相同格式的输出数据帧。你知道吗

您可以使用:

如果每个组的列中最多只有一个非值:

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

相关问题 更多 >

    热门问题