python(pandas)在数据帧内合并,无需for循环

标签 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”列进行合并以获得 df2,而无需 for 循环或 iterrows()。

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

最佳答案

您可以使用:

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

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

关于python(pandas)在数据帧内合并,无需for循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48281593/

相关文章:

python - 从右开始累计

python - 如果在列表中,则替换 pandas 数据表中的值

python - Odoo 11 开发者菜单中的 "Fields view get"选项是什么?

python - 在虚拟环境中, "sudo pip"链接到全局 python pip

Python3.4 + Django + Ubuntu : unknown encoding: raw-unicode-escape

python-3.x - Gensim build_vocab 耗时过长

python - MapReduce,调整Mapper方法

python - 循环遍历生成器的 Cythonizing for 循环

python-3.x - 如何在 selenium python 中按回车键?

python - Pandas 数据框计数唯一列表