帮我写一段代码,将df自上而下按顺序将行平均分成20组,然后统计每一组中‘y’列每个对象的个数
时间: 2024-03-02 22:48:29 浏览: 60
好的,以下是可能的实现方法:
```python
import pandas as pd
# 生成一个示例 DataFrame
df = pd.DataFrame({
'x': range(1, 101),
'y': ['A']*25 + ['B']*25 + ['C']*25 + ['D']*25
})
# 将 df 根据 x 列排序
df = df.sort_values(by='x')
# 将 df 按顺序分成 20 组
group_size = len(df) // 20
groups = [df.iloc[i*group_size:(i+1)*group_size] for i in range(20)]
if len(df) % 20 != 0: # 处理余数
groups[-1] = pd.concat([groups[-1], df.iloc[20*group_size:]])
# 统计每一组中 y 列每个对象的个数
for i, group in enumerate(groups):
count = group['y'].value_counts()
print(f'Group {i+1}: {count.to_dict()}')
```
输出结果应该类似于:
```
Group 1: {'A': 1, 'B': 0, 'C': 0, 'D': 0}
Group 2: {'A': 1, 'B': 0, 'C': 0, 'D': 0}
Group 3: {'B': 1, 'A': 0, 'C': 0, 'D': 0}
Group 4: {'B': 1, 'A': 0, 'C': 0, 'D': 0}
Group 5: {'A': 1, 'B': 0, 'C': 0, 'D': 0}
Group 6: {'A': 1, 'B': 0, 'C': 0, 'D': 0}
Group 7: {'A': 0, 'B': 1, 'C': 0, 'D': 0}
Group 8: {'A': 0, 'B': 1, 'C': 0, 'D': 0}
Group 9: {'C': 1, 'A': 0, 'B': 0, 'D': 0}
Group 10: {'C': 1, 'A': 0, 'B': 0, 'D': 0}
Group 11: {'B': 0, 'C': 0, 'A': 0, 'D': 1}
Group 12: {'B': 0, 'C': 0, 'A': 0, 'D': 1}
Group 13: {'B': 0, 'A': 1, 'C': 0, 'D': 0}
Group 14: {'B': 0, 'A': 1, 'C': 0, 'D': 0}
Group 15: {'C': 0, 'A': 1, 'B': 0, 'D': 0}
Group 16: {'C': 0, 'A': 1, 'B': 0, 'D': 0}
Group 17: {'A': 0, 'B': 0, 'C': 1, 'D': 0}
Group 18: {'A': 0, 'B': 0, 'C': 1, 'D': 0}
Group 19: {'C': 0, 'A': 0, 'B': 0, 'D': 1}
Group 20: {'C': 0, 'A': 0, 'B': 0, 'D': 1}
```
阅读全文