Python数据帧如何按一列分组并获得其他列的总和

时间:2017-12-29 11:49:31

标签: python pandas dataframe

我想创建一个新的数据框,其中包含2列,按Striker_Id分组,其他列的总和为'Batsman_Scored',对应于分组的'Striker_Id'

例如:

Striker_ID  Batsman_Scored
1            0
2            8 
...

enter image description here

我试过这个ball.groupby(['Striker_Id'])['Batsman_Scored'].sum(),但这就是我得到的:

Striker_Id
1      0000040141000010111000001000020000004001010001...
2      0000000446404106064011111011100012106110621402...
3      0000121111114060001000101001011010010001041011...
4      0114110102100100011010000000006010011001111101...
5      0140016010010040000101111100101000111410011000...
6      1100100000104141011141001004001211200001110111...

它不加总,只加入所有数字。有什么替代方案?

1 个答案:

答案 0 :(得分:1)

由于某种原因,您的列被加载为字符串。从CSV加载它们时,请尝试应用转换器 -

df = pd.read_csv('file.csv', converters={'Batsman_Scored' : int})

或者,

df = pd.read_csv('file.csv', converters={'Batsman_Scored' : pd.to_numeric})

如果这不起作用,则在加载后转换为整数 -

df['Batsman_Scored'] = df['Batsman_Scored'].astype(int)

或者,

df['Batsman_Scored'] = pd.to_numeric(df['Batsman_Scored'], errors='coerce')

现在,执行groupby应该有效 -

r = df.groupby('Striker_Id')['Batsman_Scored'].sum() 

无法访问您的数据,我只能推测。但似乎在某些时候,您的数据包含非数字数据,可防止pandas执行转换,从而导致这些列保留为字符串。在您实际加载并执行类似

之类的操作之前,查明这些有问题的数据有点困难。
df.col.str.isdigit().any()

该告诉您是否有任何非数字项目。请注意,它仅适用于整数,浮点列不能像这样调试。

另外,查看哪些列有损坏数据的另一种方法是查询dtypes -

df.dtypes

这将为您提供所有列及其数据类型的列表。使用它来确定哪些列需要解析 -

for c in df.columns[df.dtypes == object]:
    print(c)

然后,您可以应用上述方法来修复它们。