帮我写一段代码,将df按行平均分成20组,然后统计每一组中‘y’列每个对象的个数
时间: 2024-03-02 14:48:12 浏览: 198
好的,以下是代码实现:
```python
import pandas as pd
# 生成示例数据
df = pd.DataFrame({'x': range(100), 'y': ['A', 'B', 'C', 'D'] * 25})
# 按行平均分成20组
groups = pd.cut(df.index, bins=20, labels=False)
# 统计每一组中‘y’列每个对象的个数
result = df.groupby(groups)['y'].value_counts()
print(result)
```
这段代码中,我们使用了pandas的cut方法将df的index按行平均分成20组,然后使用groupby方法对分组后的df进行分组,最后统计每一组中‘y’列每个对象的个数,并打印结果。注意,这里的统计结果是按组和对象的顺序排列的,如果需要按对象和组的顺序排列,可以使用unstack方法进行转置。
相关问题
帮我写一段代码,将df自上而下按顺序将行平均分成20组,然后统计每一组中‘y’列每个对象的个数
好的,以下是可能的实现方法:
```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}
```
帮我写一段代码,将df自上而下按顺序将行平均分成20组,然后统计每一组中‘y’列每个对象的个数,并生成一个df
好的,可以使用 pandas 的 `cut` 函数实现将行平均分成20组,然后使用 `groupby` 和 `count` 统计每个分组中 'y' 列的对象个数。下面是代码示例:
```python
import pandas as pd
# 生成示例数据
df = pd.DataFrame({'x': range(100), 'y': [chr(i % 26 + 65) for i in range(100)]})
# 将行平均分成20组
df['group'] = pd.cut(df.index, bins=20, labels=False)
# 统计每个分组中 'y' 列的对象个数,生成新的 df
new_df = df.groupby(['group', 'y']).size().reset_index(name='count')
```
其中,`bins=20` 表示将行分成20组,`labels=False` 表示用数字标记每个分组。`groupby(['group', 'y'])` 表示按 'group' 和 'y' 列进行分组,`.size()` 表示统计每个分组中的对象个数,`.reset_index(name='count')` 表示将结果转换为新的 df,列名为 'count'。
阅读全文