聚合对称对(如果它们存在于Pandas中)

2024-09-21 03:25:45 发布

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

给定一个数据帧

data = {
        "col1": ['A', 'A', 'B', 'B', 'C', 'C', 'D', 'D'], 
        "col2": ['B', 'C', 'A', 'C', 'D', 'B', 'E', 'A',],
        "count": [3, 7, 12, 2, 8, 2, 5, 9]
        }
df = pd.DataFrame(data=data)

col1 col2 count
 A    B     3
 A    C     7
 B    A     12
 B    C     2
 C    D     8
 C    B     2
 D    E     5
 D    A     9

我希望聚合所有具有对称对的行,同时维护没有对称对的行。因此,输出将是一个新的数据帧

col1 col2 count
 A    B     15
 A    C     7
 B    C     4
 C    D     8
 D    E     5
 D    A     9

我看过Aggregate symmetric pairs pandasFind symmetric pairs quickly in numpy,但它们都没有特别帮助我


Tags: 数据indataframepandasdfdatacountfind
2条回答

实际上,给定的链接使用了apply,这通常比较慢。下面是一个带有np.sort的解决方案:

s = np.sort(df[['col1','col2']], axis=1)
df.groupby([s[:,0],s[:,1]])['count'].sum().reset_index()

输出:

  level_0 level_1  count
0       A       B     15
1       A       C      7
2       A       D      9
3       B       C      4
4       C       D      8
5       D       E      5

answer you linked的一些小修改可以满足您的需要:

df1 = df[['col1', 'col2']].apply(sorted, 1, result_type = "expand").rename(columns = {0:'col1', 1:'col2'})

df.groupby([df1.col1, df1.col2]).sum().reset_index()

  col1 col2  count
0    A    B     15
1    A    C      7
2    A    D      9
3    B    C      4
4    C    D      8
5    D    E      5

相关问题 更多 >

    热门问题