gpt4 book ai didi

python - 按计数分组和聚合 : how to keep column names?

转载 作者:太空宇宙 更新时间:2023-11-04 03:32:54 25 4
gpt4 key购买 nike

我有一个示例数据框,类似于我在下面创建的合成数据框。每个 ID 都被分类为 goodbad(这些也可以是国家/地区代码,例如 USESRU 等):

In [55]: nf = pandas.DataFrame({'id': numpy.random.randint(0,100,1000)
,'how':numpy.random.choice(['good','bad'],1000)
,'A':numpy.random.randn(1000)
,'B':numpy.random.randn(1000)
})

In [56]: for i in numpy.unique(nf['id'].values):
.....: nf.loc[nf.loc[idx[:],idx['id']] == i, 'how'] = "good" if is_odd(i) else "bad"

我通过以下方式定义 is_odd() 的地方:

def is_odd(num):
return num & 0x1

现在,我想做如下操作

  • 按 ID 对数据进行分组
  • 计算每个组的条目/行数
  • 绘制整个人口计数的直方图
  • 绘制“好”和“坏”计数的直方图

例如,我会执行前两个操作:

In [57]: nf.groupby(['id','how']).agg('count')
Out[57]:
A B
id how
0 bad 9 9
1 good 13 13
2 bad 16 16
3 good 8 8
4 bad 7 7
5 good 11 11
6 bad 10 10
7 good 14 14
8 bad 12 12
9 good 8 8
10 bad 12 12
... .. ..

我的问题:我无法访问列 iphow。我可以在分组结果上 .hist(),但我不能再分离数据了。

有没有更聪明(不是说,正确)的方法来解决这个问题?

最佳答案

那么你可以使用 pandas.DataFrame.reset_index()将多索引转换为列:

In [6]: nf.groupby(['id','how']).agg('count').reset_index().head(10)
Out[6]:
id how A B
0 0 bad 7 7
1 0 good 6 6
2 1 bad 5 5
3 1 good 5 5
4 2 bad 6 6
5 2 good 4 4
6 3 bad 3 3
7 3 good 7 7
8 4 bad 11 11
9 4 good 6 6

另一种方法是使用 pandas.DataFrame.groupby()as_index 参数:

In [13]: nf.groupby(['id','how'], as_index=False).agg({'A':'count', 'B':'count'}).head(10)
Out[13]:
id how A B
0 0 bad 7 7
1 0 good 6 6
2 1 bad 5 5
3 1 good 5 5
4 2 bad 6 6
5 2 good 4 4
6 3 bad 3 3
7 3 good 7 7
8 4 bad 11 11
9 4 good 6 6

关于python - 按计数分组和聚合 : how to keep column names?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30354637/

25 4 0