![](/img/trans.png)
[英]How to sum values in dataframe until certain values in other column by group?
[英]Python dataframe how to group by one column and get sum of other column
我想创建一个新的数据框,它有 2 列,按Striker_Id
和其他列分组, Striker_Id
列具有与分组的 'Striker_Id' 相对应的 'Batsman_Scored' 总和
例如:
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...
它不求和,只连接所有数字。 什么是替代方案?
出于某种原因,您的列被加载为字符串。 从 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)
然后,您可以应用上述方法来修复它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.