如何对DataFrame两列中反向配对的value_counts求和
解决反向配对求和问题
先把你的示例数据转成可复现的DataFrame:
import pandas as pd df = pd.DataFrame({ 'foo': ['a', 'b', 'c', 'd'], 'bar': ['b', 'a', 'd', 'c'], 'value_count': [7, 22, 15, 111] })
核心思路是给每一行的foo和bar生成标准化配对键——把两个值排序后组成元组,这样(a,b)和(b,a)会被识别为同一个键,之后按这个键分组求和即可:
# 生成排序后的配对键,统一反向配对的标识 df['pair'] = df.apply(lambda x: tuple(sorted([x['foo'], x['bar']])), axis=1) # 按配对键分组求和,再把拆分键为foo、bar列 result = df.groupby('pair')['value_count'].sum().reset_index() result[['foo', 'bar']] = pd.DataFrame(result['pair'].tolist(), index=result.index) # 清理临时列并调整顺序 result = result[['foo', 'bar', 'value_count']]
运行后得到的result就是你要的输出:
foo bar value_count 0 a b 29 1 c d 126
你之前用set()处理列表没效果,是因为set只能做去重,没法把反向配对归为同一组,更处理不了求和需求。上面的方法通过生成排序后的配对键,精准把反向配对归为一组,完美解决求和问题。
内容的提问来源于stack exchange,提问作者Mikołaj Przygoda
相关产品推荐
相关产品推荐

