如何从pandas中的频率表中提取数组

时间:2016-12-21 03:45:00

标签: python pandas numpy

我在熊猫中有一个频率表。我想将每个气味水平的每个类别的频率提取到一个列表中,每个元素都是一个NumPy数组,包含给定气味水平的类别的频率计数。如何在不手动指定行和列的情况下执行此操作?

这就是我所拥有的:

test=df.groupby(['odor', 'class'])
test.size()

结果是:

odor  class
a     e         400
c     p         192
f     p        2160
l     e         400
m     p          36
n     e        3408
      p         120
p     p         256
s     p         576
y     p         576
dtype: int64

2 个答案:

答案 0 :(得分:0)

请注意,您提供的零数据无法使用。基于你留下的半个线索,我完全猜测你的数据是什么样的。

df = pd.DataFrame(
    {
        'odor': np.random.choice(list('acflmnpsy'), 100),
        'class': np.random.choice(list('ep'), 100),
        'frequency': np.random.choice(np.arange(60, 241), 100)
    }
)

df.groupby(['odor', 'class']).frequency.apply(np.array)

odor  class
a     e                             [170, 178, 67, 97]
      p                                 [183, 165, 73]
c     e                            [106, 163, 71, 171]
      p                       [72, 224, 112, 196, 134]
f     e               [134, 67, 190, 226, 74, 62, 107]
      p             [222, 74, 177, 186, 122, 120, 121]
l     e                   [81, 97, 124, 181, 101, 185]
      p                            [182, 136, 77, 190]
m     e                 [217, 121, 141, 102, 171, 106]
      p              [127, 178, 127, 72, 209, 63, 167]
n     e                   [166, 121, 79, 117, 130, 92]
      p                            [71, 136, 219, 155]
p     e            [118, 193, 147, 219, 154, 130, 169]
      p             [69, 162, 138, 193, 236, 144, 192]
s     e                                [105, 139, 143]
      p                        [72, 149, 186, 220, 63]
y     e            [143, 134, 102, 144, 186, 207, 181]
      p        [177, 215, 190, 158, 203, 157, 85, 172]
Name: frequency, dtype: object

答案 1 :(得分:0)

这是你要找的吗?

df.pivot_table(index = ['Class'],columns = ['Odor'],value = ['freq'],aggfunc ='sum')