在python中合并来自重复记录的信息

2024-09-27 19:10:32 发布

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

给出这个数据示例,我希望通过mergin info按一列删除行,而不是删除行。在本例中是字段代码。你知道吗

df = pd.DataFrame({'CODE':['000', '111','111','222','222', '333'],'NAME':['help','foo','bar', 'bla','booo','nyaa']  ,'ALT_NAME':['zzz','foo 1','bar', 'bl','bo','rrr'] })
print(df)

输出:

    ALT_NAME    CODE    NAME
0   zzz         000     help
1   foo 1       111     foo
2   bar         111     bar
3   bl          222     bla
4   bo          222     booo
5   rrr         333     nyaa

结果是:

    ALT_NAME        CODE            NAME
0   zzz             000             help
1   [foo 1, bar]    [111,111]       [foo,bar]
2   [bl,bo]         [222,222]       [bla,boo]
3   rrr             333             nyaa

我已接近解决方案,但无法实现:

线索:

df.groupby('CODE')['ALT_NAME','NAME'].apply(list).reset_index()

但这对几个专栏来说是行不通的


Tags: 数据namedffoobarhelpcodealt
2条回答

我认为这对您很有用,aggaggregate的别名,它应用于组的每个列:

 df.groupby(['CODE']).agg(lambda x:list(x))

顺便说一句,有人知道我运行df.groupby(['CODE']).agg(list)时失败的原因吗?你知道吗

用途:

df = pd.DataFrame({'CODE':['000', '111','111','222','222', '333'],'NAME':['help','foo','bar', 'bla','booo','nyaa']  ,'ALT_NAME':['zzz','foo 1','bar', 'bl','bo','rrr'] })
print (df)

输出:

  ALT_NAME CODE  NAME
0      zzz  000  help
1    foo 1  111   foo
2      bar  111   bar
3       bl  222   bla
4       bo  222  booo
5      rrr  333  nyaa

在我看来,最好是按^{}创建所有值的列表,但首先按^{}列创建index

df1 = (df.set_index('CODE', drop=False)
         .rename_axis(None)
         .groupby('CODE')
         .agg(list)
         .reset_index(drop=True))
print (df1)

输出:

       ALT_NAME         NAME
0           zzz         help
1  [foo 1, bar]   [foo, bar]
2      [bl, bo]  [bla, booo]
3           rrr         nyaa

但如果需要,可以在lambda函数中添加if-else

df1 = (df.set_index('CODE', drop=False)
         .rename_axis(None)
         .groupby(level=0)
         .agg(lambda x: list(x) if len(x) > 1 else x)
         .reset_index(drop=True))
print (df1)

输出:

       ALT_NAME        CODE         NAME
0           zzz         000         help
1  [foo 1, bar]  [111, 111]   [foo, bar]
2      [bl, bo]  [222, 222]  [bla, booo]
3           rrr         333         nyaa

相关问题 更多 >

    热门问题