python pandas 分组转成字典再和另一个分组合并
时间: 2024-05-28 22:04:44 浏览: 65
假设有两个数据集,分别为df1和df2。其中df1包含学生姓名和成绩,df2包含学生姓名和班级:
```python
import pandas as pd
df1 = pd.DataFrame({
'name': ['Tom', 'Jack', 'Mary', 'Tom', 'Jack', 'Mary', 'Tom', 'Jack', 'Mary'],
'score': [80, 90, 70, 85, 95, 75, 88, 92, 78]
})
df2 = pd.DataFrame({
'name': ['Tom', 'Jack', 'Mary'],
'class': ['A', 'B', 'C']
})
```
现在需要将df1按照姓名分组,转换成字典,再将df2按照姓名分组,转换成字典,最后将两个字典合并。
```python
# 将df1按照姓名分组,转换成字典
df1_dict = df1.groupby('name')['score'].apply(list).to_dict()
# 将df2按照姓名分组,转换成字典
df2_dict = df2.groupby('name')['class'].apply(list).to_dict()
# 合并两个字典
result_dict = {}
for name in set(df1['name']).union(set(df2['name'])):
result_dict[name] = {'score': df1_dict.get(name, []), 'class': df2_dict.get(name, [])}
print(result_dict)
```
输出如下:
```
{
'Mary': {'score': [70, 75, 78], 'class': ['C']},
'Jack': {'score': [90, 95, 92], 'class': ['B']},
'Tom': {'score': [80, 85, 88], 'class': ['A']}
}
```
可以看到,最终得到了按照姓名分组的字典,其中每个元素包含了对应学生的成绩和班级。
阅读全文