如何在Pandas DataFrame中按三列匹配对Col1列值求和?
问题描述
我有一个包含Col1、Col2、Col3、Col4四列的Pandas DataFrame,原始数据如下:
| Col1 | Col2 | Col3 | Col4 |
|---|---|---|---|
| 1 | 0 | 0 | 1 |
| 5 | 0 | 0 | 0 |
| 6 | 1 | 0 | 1 |
| 1 | 0 | 0 | 1 |
希望将Col2、Col3、Col4取值完全相同的行的Col1值求和,得到如下目标DataFrame:
| Col1 | Col2 | Col3 | Col4 |
|---|---|---|---|
| 2 | 0 | 0 | 1 |
| 5 | 0 | 0 | 0 |
| 6 | 1 | 0 | 1 |
尝试执行以下代码后,print(df)并未得到正确求和结果:
df = df.groupby(["col2","col3","col4"]).col1.sum()
请问是否需要先强制转换列的类型?
解决方案
核心问题:列名大小写不匹配
Pandas对列名大小写敏感,你的代码里用了小写的col2/col3/col4/col1,但原始DataFrame的列名是大写开头的Col1/Col2/Col3/Col4,这会导致分组时无法匹配到正确列,自然无法完成求和。
正确代码
使用与原始数据一致的列名,同时加上as_index=False参数让分组列保持为普通列(避免变成索引),就能得到目标结构:
df = df.groupby(["Col2", "Col3", "Col4"], as_index=False)["Col1"].sum()
关于列类型转换
从你的数据来看,所有列值都是整数,只要读取数据时Col1被识别为数值类型(int/float),就不需要强制转换。可以先通过以下代码检查列类型:
print(df.dtypes)
如果Col1的类型是object(字符串),再执行转换:
df["Col1"] = df["Col1"].astype(int)
内容的提问来源于stack exchange,提问作者plerpsandplerps
相关产品推荐
相关产品推荐

