gpt4 book ai didi

python - 合并两列以消除重复的行

转载 作者:太空宇宙 更新时间:2023-11-04 02:16:33 26 4
gpt4 key购买 nike

我目前的情况是我有一个看起来像这样的数据框

          id  tp    dt        amt
0 1 CR 2017 94678.0
1 1 CR 2018 13508.0
2 1 DR 2017 78671.0
3 1 DR 2018 13797.0
4 2 CR 2017 111417.0
5 2 CR 2018 21479.0
6 2 DR 2017 95266.0
7 2 DR 2018 1864.0

我想要实现的是合并 tp 和 dt 两列的值,并将其用作 amt 的列名称,以潜在地删除具有相同 ID 的多行。简而言之,它应该类似于以下内容

          id     CR2017   CR2018   DR2017  DR2018
0 1 94678.0 13508.0 78671.0 13797.0
1 2 111417.0 21479.0 95266.0 1864.0

我想知道这是否可能?我一直在玩弄 reset_index、set_index 和 pivot_table 一个小时,但仍然没有运气在此先感谢,帮助将不胜感激

最佳答案

使用set_index与连接列和 unstack reshape :

df = df.set_index(['id', df['tp'] + df['dt'].astype(str)])['amt'].unstack().reset_index()
print (df)
id CR2017 CR2018 DR2017 DR2018
0 1 94678.0 13508.0 78671.0 13797.0
1 2 111417.0 21479.0 95266.0 1864.0

或创建新列:

df['new'] = df['tp'] + df['dt'].astype(str)
df = df.set_index(['id', 'new'])['amt'].unstack().rename_axis(None, axis=1).reset_index()
print (df)
id CR2017 CR2018 DR2017 DR2018
0 1 94678.0 13508.0 78671.0 13797.0
1 2 111417.0 21479.0 95266.0 1864.0

但是如果得到:

ValueError: Index contains duplicate entries, cannot reshape

这意味着有重复的 id 和 joine 对,例如:

print (df)
id tp dt amt
0 1 CR 2017 94678.0 <-dupe 1 CR 2017
0 1 CR 2017 10000.0 <-dupe 1 CR 2017
1 1 CR 2018 13508.0
2 1 DR 2017 78671.0
3 1 DR 2018 13797.0
4 2 CR 2017 111417.0
5 2 CR 2018 21479.0
6 2 DR 2017 95266.0
7 2 DR 2018 1864.0

解决方案是聚合 - by groupby + 聚合函数,如 meansumunstack :

df = df.groupby(['id', df['tp'] + df['dt'].astype(str)])['amt'].mean().unstack().reset_index()

pivot_table默认 aggfunc='mean':

df = df.pivot_table(index='id',columns=df['tp'] + df['dt'].astype(str), values= 'amt').reset_index()

关于python - 合并两列以消除重复的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52533258/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com