我想创建一个新的数据框,其中包含2列,按Striker_Id
分组,其他列的总和为'Batsman_Scored',对应于分组的'Striker_Id'
例如:
Striker_ID Batsman_Scored
1 0
2 8
...
我试过这个ball.groupby(['Striker_Id'])['Batsman_Scored'].sum()
,但这就是我得到的:
Striker_Id
1 0000040141000010111000001000020000004001010001...
2 0000000446404106064011111011100012106110621402...
3 0000121111114060001000101001011010010001041011...
4 0114110102100100011010000000006010011001111101...
5 0140016010010040000101111100101000111410011000...
6 1100100000104141011141001004001211200001110111...
它不加总,只加入所有数字。有什么替代方案?
答案 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)
然后,您可以应用上述方法来修复它们。