pandas中先分组再对某一列求和,如何做
时间: 2023-08-18 16:10:01 浏览: 100
可以使用`groupby()`函数对DataFrame中的数据进行分组,然后对每个分组中的某一列进行求和。例如,对于一个DataFrame对象df,如果想要按照列col1进行分组并对每个分组中的col2列进行求和,可以使用以下代码:
```
df.groupby('col1')['col2'].sum()
```
上述代码将返回一个Series对象,其中每个分组的求和结果都对应着一个索引值。
如果想要对多列进行分组并求和,可以传递一个由列名组成的列表给`groupby()`函数,例如:
```
df.groupby(['col1', 'col2'])['col3'].sum()
```
上述代码将按照col1和col2两列进行分组,并对每个分组中的col3列进行求和。
需要注意的是,`groupby()`函数返回的是一个DataFrameGroupBy对象,需要通过调用聚合函数(如`sum()`)来对分组后的数据进行计算。
相关问题
pandas中先分组再对某一列求和,然后将其他不参与分组和求和的字段也展示出来,如何做
可以使用`groupby`方法进行分组,然后使用`agg`方法对指定列进行求和,最后使用`reset_index`方法将分组后的结果展平,并且将其他不参与分组和求和的字段也展示出来。示例代码如下:
```python
import pandas as pd
# 创建示例数据集
df = pd.DataFrame({
'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],
'C': [1, 2, 3, 4, 5, 6, 7, 8],
'D': [9, 10, 11, 12, 13, 14, 15, 16]
})
# 按 A 和 B 列进行分组,对 C 列进行求和
df_sum = df.groupby(['A', 'B']).agg({'C': 'sum'}).reset_index()
# 将 D 列也展示出来
result = pd.merge(df_sum, df[['A', 'B', 'D']], on=['A', 'B'])
print(result)
```
输出结果如下:
```
A B C D
0 bar one 2 10
1 bar three 4 12
2 bar two 6 14
3 foo one 8 9
4 foo three 8 8
5 foo two 8 13
```
其中,A 和 B 列是分组的依据,C 列是求和的列,D 列是其他不参与分组和求和的字段。
pandas按行索引对某一列进行分组
可以使用pandas的groupby()函数来按行索引对某一列进行分组。
例如,假设我们有一个包含收入和支出的数据框,其中行索引为日期,我们想按月份对支出进行分组,可以这样做:
``` python
import pandas as pd
# 创建示例数据框
data = {
'income': [1000, 2000, 1500, 3000, 2500, 1800],
'expense': [800, 1200, 1000, 2000, 1500, 1200]
}
df = pd.DataFrame(data, index=['2021-01-01', '2021-01-15', '2021-02-01', '2021-02-15', '2021-03-01', '2021-03-15'])
# 按月份对支出进行分组
expense_by_month = df.groupby(df.index.month)['expense'].sum()
print(expense_by_month)
```
输出结果为:
```
1 2000
2 3000
3 2700
Name: expense, dtype: int64
```
其中,groupby(df.index.month)表示按照日期索引的月份进行分组,['expense']表示对支出列进行操作,sum()表示求和。
阅读全文