2
我有一個熊貓數據框類似如下:過濾大熊貓數據幀到多指標組
df = pandas.DataFrame({'A' : ['foo', 'foo', 'foo', 'foo', 'bar', 'bar', \
'bar', 'bar', 'baz', 'baz', 'baz', 'baz'],\
'B' : ['one', 'one', 'two', 'two', 'one', 'one', \
'two', 'two', 'one', 'one', 'two', 'two'],\
'C' : pandas.np.random.randn(12)})
df
A B C
0 foo one -0.241101
1 foo one -0.658436
2 foo two 0.300752
3 foo two -0.589445
4 bar one 1.775511
5 bar one 0.068603
6 bar two -0.464550
7 bar two -0.621055
8 baz one -1.469311
9 baz one 0.490963
10 baz two -0.606491
11 baz two -0.006323
我想要做的是過濾用C這比該組的平均值的那些值( A,B)。
分組工作:
groups = df.groupby([df.A, df.B])
upper_bound = groups.C.mean()
upper_bound
A B
bar one 0.922057
two -0.542803
baz one -0.489174
two -0.306407
foo one -0.449768
two -0.144346
Name: C, dtype: float64
但我怎麼現在篩選,這樣(在這個例子中)排1 foo one -0.658436
將被刪除
我嘗試了以下幾件事:
df_ = df.loc[df.C <= upper_bound.loc[df.A, df.B]]
但那說
'None of [0 foo\n1 foo\n2 foo\n3 foo\n4 bar\n5 bar\n6 bar\n7 bar\n8 baz\n9 baz\n10 baz\n11 baz\nName: A, dtype: object] are in the [index]'
而且我想:
df_ = df.loc[df.C <= upper_bound[df.A, df.B]]
這給了我:
pandas/index.pyx in pandas.index.IndexEngine.get_loc (pandas/index.c:3824)()
pandas/index.pyx in pandas.index.IndexEngine.get_loc (pandas/index.c:3492)()
TypeError:
我這樣嘗試它的原因是因爲我已經(至少我認爲)設法做到了「相同「的事情,但有一個層次的羣體:
groups = df.groupby([df.A])
upper_bound = groups.C.mean()
df_ = df.loc[df.C <= upper_bound.loc[df.A]
而實際得到的DF擺脫everyhing的,其中C是低於UPPER_BOUND。
我做錯了什麼想法?
非常感謝!這實際上到目前爲止工作! :) 但我仍然不明白我做錯了什麼。你能否詳細說明不同數量的元素參數?我認爲通過選擇'upper_bound.loc [df.A,df.B]''我會得到正確的數量,就像在一級組操作中一樣...... – degill