1

我想将排列后的 col1 和 col2 值组合成一行。仅包含第一个组合和对两者的计数列求和。有没有简单的方法在熊猫中做到这一点?

示例数据框和输出:例如,在下面的数据框中,我想将具有值 A、B 和 B、A 的行组合起来,并对它们的计数列求和。对于具有值 C、D 和 D、C 的行也是如此,并对它们的计数值求和。我想保持数据框中的其余行不变。

输入:

col1 col2 数数
一种 3
C D 2
一种 5
F 2
G H 8
D C 5
一世 Ĵ 4

输出:

col1 col2 数数
一种 8
C D 7
F 2
G H 8
一世 Ĵ 4
4

2 回答 2

2

您可以.groupby根据 col1/col2 排序:

x = (
    df.groupby(df[["col1", "col2"]].apply(lambda x: tuple(sorted(x)), 1))
    .agg({"col1": "first", "col2": "first", "count": "sum"})
    .reset_index(drop=True)
)
print(x)

印刷:

  col1 col2  count
0    A    B      8
1    C    D      7
2    E    F      2
3    G    H      8
4    I    J      4
于 2021-08-29T19:32:03.430 回答
1

我们可以np.sort跨行以确保相同的值出现在正确的列中(例如A BB A两者都成为A B),然后groupby sum在现在排序的列上:

# Sort Across Rows
df[['col1', 'col2']] = np.sort(df[['col1', 'col2']], axis=1)
# Accumulate counts by col1 and col2 (now in same columns)
df = df.groupby(['col1', 'col2'], as_index=False)['count'].sum()

df

  col1 col2  count
0    A    B      8
1    C    D      7
2    E    F      2
3    G    H      8
4    I    J      4

设置(DataFrame 和导入):

import numpy as np
import pandas as pd

df = pd.DataFrame({
    'col1': ['A', 'C', 'B', 'E', 'G', 'D', 'I'],
    'col2': ['B', 'D', 'A', 'F', 'H', 'C', 'J'],
    'count': [3, 2, 5, 2, 8, 5, 4]
})
于 2021-08-29T19:37:32.723 回答