在Pandas中分组和求和

3

我有一个数据框,它有两列。第一列包含年份,第二列包含。我想对某个年份进行分组,并将其更改为该组的一个名称,并添加所有相应的值。

例如,以下是小型数据集:

years    value
1950      3
1951      1
1952      2
1961      4
1964      10
1970      34

输出结果应如下所示。
years    value
1950's     6
1960's     14
1970's     34

我正在使用Python和pandas尝试这个,尝试了许多方法,包括转换为字典或使用for循环,但每次我都无法达到所需的效果。 请问有人可以帮忙吗?

2个回答

3

使用整数除法,乘以10,转换为字符串并添加s,然后使用此系列进行聚合sum

y = ((df['years'] // 10) * 10).astype(str) + 's'

df = df.groupby(y)['value'].sum().reset_index()
print (df)
   years  value
0  1950s      6
1  1960s     14
2  1970s     34

详情:

print (y)
0    1950s
1    1950s
2    1950s
3    1960s
4    1960s
5    1970s
Name: years, dtype: object

@AkshayNevrekar 我尝试了地板除法和乘法 ((trial['years']//10)*10).astype(str) + 's' 但是出现了错误:不支持的操作数类型:'str' 和 'int'。 - Rawss24
@ShubhamRawlani - 请问 y = ((df['years'].astype(int) // 10) * 10).astype(str) + 's' 这段代码是如何工作的? - jezrael

1
使用pd.cut创建分组,然后使用groupby
df['year'] = pd.cut(df['year'], bins=[1949,1959,1969,1979], labels=['1950s','1960s','1970s'])

print(df.groupby('year')['value'].sum().reset_index())

输出:

   year  value                                                                                                                       
0  1950s      6                                                                                                                       
1  1960s     14                                                                                                                       
2  1970s     34  

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接