【问题标题】:Get Name of group and group's elements in an array获取数组中组和组元素的名称
【发布时间】:2019-10-26 02:24:33
【问题描述】:

我有这个数据框:

df:
    A       B
0   a       class1
1   b       class12
2   a       class2
3   a       class1
4   b       class13

所以,我将 df 分组如下:

df=df.groupby(['A', 'B'])['B'].count()

我明白了

A    B 
a    class1    2
     class2    1
b    class12   1
     class13   1

然后我需要访问这些值,我正在考虑将它们保存在一个数组数组中,这样我就可以轻松读取它并将这些数据表示在一个表中,如下所示:

array = [[a,[class1,1],[class2,1]],[b,[class12,1],[class13,1]]]

最好的方法是什么?还有其他更好的选择吗?

在我真正的问题中,我不知道我将拥有哪些组或组的元素,并且在 groupby 操作之后我需要将它们全部列出。

谢谢

【问题讨论】:

  • 您所称的df(分组后)是Series,保证唯一的MultiIndex。做df.to_dict(),这和你得到的一样好
  • 您如何使用您提供的格式访问这些值?结果系列更容易,例如df[('a','class1')]给你2等等。或者@ALollz 建议的dict
  • @QuangHoang mm,带有 for 循环?问题是我不知道我将拥有哪些组和项目组,我想将它们全部列出。我将编辑我的问题
  • 您可以通过df.index.values访问群组列表,该列表提供[(a, class1)...],并访问评论的项目。
  • @QuangHoang,我如何访问 A 值并将它们保存到列表中?在这种情况下:A_values = [a,b]

标签: pandas pandas-groupby series


【解决方案1】:

简洁

[[n, [*d.B.value_counts().items()]] for n, d in df.groupby('A')]

[['a', [('class1', 2), ('class2', 1)]],
 ['b', [('class13', 1), ('class12', 1)]]]

如果你想要列表而不是元组

[[n, [*map(list, d.B.value_counts().items())]] for n, d in df.groupby('A')]

[['a', [['class1', 2], ['class2', 1]]],
 ['b', [['class13', 1], ['class12', 1]]]]

dict

d = {}
for a, b in df.itertuples(index=False):
    d.setdefault(a, {}).setdefault(b, 0)
    d[a][b] += 1

[[k, [*map(list, v.items())]] for k, v in d.items()]

[['a', [['class1', 2], ['class2', 1]]],
 ['b', [['class12', 1], ['class13', 1]]]]

【讨论】:

    【解决方案2】:

    你的情况

    df.groupby(['A', 'B']).size().reset_index(level=1).apply(list,1).\
        groupby(level=0).\
         apply(list).reset_index().values.tolist()
    Out[125]: 
    [['a', [['class1', 2], ['class2', 1]]],
     ['b', [['class12', 1], ['class13', 1]]]]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-06
      • 2014-12-19
      • 2021-07-04
      • 1970-01-01
      • 2017-12-29
      • 2018-06-24
      • 2016-07-01
      • 1970-01-01
      相关资源
      最近更新 更多