python(pandas)在没有for循环的数据框架内合并

时间:2018-01-16 12:43:32

标签: python python-3.x pandas dataframe merge

您好我有以下数据框:

>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

2 个答案:

答案 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仅用于以相同格式获取输出数据帧。