小能豆

计算 Pandas 中值的数量

py

我有一个构建如下的 Pandas 数据框:

Col1 Col2
1 A
1 B
1 B
2 A
2 A
3 A
3 Nan

对于 Col1 的每一个值,我想计算 Col2 的每个值(忽略 Nan 值)并将总和放在关联列中,得到如下结果:

Col1 A B
1 1 2
2 2 0
3 1 0

我该如何在 Pandas 中做到这一点?我在 Col1 中有很多值,在 Col2 中也有很多列。非常感谢!


阅读 25

收藏
2024-12-02

共1个答案

小能豆

你可以使用 groupbypivot_table 方法来实现这个目标。具体步骤如下:

  1. 使用 groupbyvalue_counts 来统计每个组的每个类别(Col2 中的不同值)。
  2. 然后将结果转换为数据框,并对 NaN 值进行处理。

这里是实现代码:

import pandas as pd

# 创建示例数据框
data = {
    'Col1': [1, 1, 1, 2, 2, 3, 3],
    'Col2': ['A', 'B', 'B', 'A', 'A', 'A', None]
}
df = pd.DataFrame(data)

# 使用 groupby 和 value_counts 来统计每个 Col1 中每个 Col2 的出现次数
result = df.groupby('Col1')['Col2'].value_counts().unstack(fill_value=0)

# 显示结果
print(result)

解释:

  • groupby('Col1')['Col2'].value_counts() 会根据 Col1 分组,并统计每个组中 Col2 的值出现的次数。
  • unstack(fill_value=0) 会把 Col2 中的唯一值转换为列,并将缺失的计数填充为 0。

输出结果:

Col2  A  B
Col1      
1     1  2
2     2  0
3     1  0

这个方法对于具有多个不同 Col2 值的情况同样适用。如果 Col2 有其他值(例如 C, D 等),unstack() 会自动创建新的列并填充计数。

2024-12-02