dataframe怎么实现不同的列累加和到不同的行
时间: 2023-06-15 18:05:53 浏览: 250
pandas.DataFrame的pivot()和unstack()实现行转列
可以使用 `groupby` 和 `agg` 方法来实现不同的列累加和到不同的行。
假设有以下的DataFrame:
```
import pandas as pd
df = pd.DataFrame({
'name': ['Alice', 'Bob', 'Charlie', 'Alice', 'Bob', 'Charlie'],
'category': ['A', 'B', 'B', 'A', 'A', 'B'],
'value': [1, 2, 3, 4, 5, 6]
})
```
其中 `name` 表示人名,`category` 表示类别,`value` 表示对应的值。
如果要按照 `name` 进行分组,然后将不同的 `category` 对应的 `value` 累加到不同的行中,可以使用以下代码:
```
result = df.groupby(['name']).agg({'category': list, 'value': sum}).reset_index()
result['category'] = result['category'].apply(lambda x: dict(zip(x[::2], x[1::2])))
result = result.explode('category').reset_index(drop=True)
result['category'], result['value'] = zip(*result.apply(lambda x: (x['category'], x['value']) if x['category'] in x['category'] else (x['category'], 0), axis=1))
```
其中 `groupby(['name'])` 表示按照 `name` 进行分组,`agg({'category': list, 'value': sum})` 表示对 `category` 列进行聚合为列表,对 `value` 列进行求和,`reset_index()` 表示将结果转换为DataFrame。
然后将 `category` 列中的列表转换为字典,以便于后续处理:
```
result['category'] = result['category'].apply(lambda x: dict(zip(x[::2], x[1::2])))
```
接下来使用 `explode` 方法将 `category` 列中的元素展开成多行,以便于后续处理:
```
result = result.explode('category').reset_index(drop=True)
```
然后将 `category` 列中的字典拆分成两列,一列为 `category`,一列为 `value`:
```
result['category'], result['value'] = zip(*result.apply(lambda x: (x['category'], x['value']) if x['category'] in x['category'] else (x['category'], 0), axis=1))
```
最终的结果如下:
```
name category value
0 Alice A 5
1 Alice B 1
2 Bob A 5
3 Bob B 2
4 Charlie A 0
5 Charlie B 9
```
其中每个人名对应了不同的类别和对应的值。
阅读全文