熊猫df groupby并申请

迈克·弗拉德

假设以下df:

df = pd.DataFrame(
    {
    'col 1': ['A', 'A', 'B', 'B', 'C'],
    'col 2': ['c2', 'd2', 'e2', 'f2', 'g2'],
    'col 3': ['c3', 'd3', 'e3', 'f3', 'g3'],
    'col 4': ['c4', 'd4', 'e4', 'f4', 'g4'],
    }
    )

所需的输出是:

col 1  col 2  col 3
A      c2;d2  c3;d3
B      e2;f2  e3;f3
C      g2     g3

我已经通过以下方式成功做到了这一点:

df = df.groupby('col 1').transform( lambda x: ';'.join(x)).drop_duplicates()

问题是这种方法不会保留我真正需要的列1。而且我无法apply上班。我已经尝试过这种方法,但是之后似乎不起作用。groupby

apply(lambda x: '*'.join(x.dropna().values.tolist()), axis=1)
耶斯列尔

我想你也可以在指定列表中的列groupby与函数DataFrameGroupBy.agglambda function是没有必要的:

df1 = df.groupby('col 1')['col 2','col 3'].agg(';'.join).reset_index()
#alternative
#df1 = df.groupby('col 1', as_index=False)['col 2','col 3'].agg(';'.join)
print (df1)
  col 1  col 2  col 3
0     A  c2;d2  c3;d3
1     B  e2;f2  e3;f3
2     C     g2     g3

如果还需要删除缺失值:

df = pd.DataFrame(
    {
    'col 1': ['A', 'A', 'B', 'B', 'C'],
    'col 2': [np.nan, 'd2', 'e2', 'f2', 'g2'],
    'col 3': ['c3', 'd3', 'e3', 'f3', 'g3'],
    'col 4': ['c4', 'd4', 'e4', 'f4', 'g4'],
    }
    )
print (df)
  col 1 col 2 col 3 col 4
0     A   NaN    c3    c4
1     A    d2    d3    d4
2     B    e2    e3    e4
3     B    f2    f3    f4
4     C    g2    g3    g4

df1 = (df.groupby('col 1', as_index=False)['col 2','col 3']
         .agg(lambda x: ';'.join(x.dropna())))
print (df1)
  col 1  col 2  col 3
0     A     d2  c3;d3
1     B  e2;f2  e3;f3
2     C     g2     g3

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

TOP 榜单

热门标签

归档