gpt4 book ai didi

python - groupby 并删除 pandas 中的配对记录

转载 作者:行者123 更新时间:2023-11-30 22:17:04 25 4
gpt4 key购买 nike

我有一个像这样的数据框,

col1    col2    col3    col4
a1 b1 c1 +
a1 b1 c1 +
a1 b2 c2 +
a1 b2 c2 -
a1 b2 c2 +

如果有两条记录在 col1col2col3 中具有相同的值,并且在 col4 中具有相反的符号,它们应该从数据框中删除。

输出:

col1    col2    col3    col4
a1 b1 c1 +
a1 b1 c1 +
a1 b2 c2 +

到目前为止,我尝试了 pandas duplicatedgroupby 但没有成功找到对。如何做到这一点?

最佳答案

我认为需要cumcount对于计数组,定义所有 4 列,然后使用帮助器 Series 再次进行 groupby 定义 +- 组并与 set 进行比较:

s = df.groupby(['col1','col2','col3', 'col4']).cumcount()
df = df[~df.groupby(['col1','col2','col3', s])['col4']
.transform(lambda x: set(x) == set(['+','-']))]
print (df)
col1 col2 col3 col4
0 a1 b1 c1 +
1 a1 b1 c1 +
6 a1 b2 c2 +

为了更好地理解,创建新列:

df['help'] = df.groupby(['col1','col2','col3', 'col4']).cumcount()
print (df)
col1 col2 col3 col4 help
0 a1 b1 c1 + 0
1 a1 b1 c1 + 1
2 a1 b2 c2 + 0
3 a1 b2 c2 - 0
4 a1 b2 c2 + 1

df = df[~df.groupby(['col1','col2','col3', 'help'])['col4']
.transform(lambda x: set(x) == set(['+','-']))]
print (df)
col1 col2 col3 col4 help
0 a1 b1 c1 + 0
1 a1 b1 c1 + 1
4 a1 b2 c2 + 1

关于python - groupby 并删除 pandas 中的配对记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49753762/

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