我在熊猫中有一个频率表。我想将每个气味水平的每个类别的频率提取到一个列表中,每个元素都是一个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
答案 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')