0
我有許多描述列的數據幀和一對夫婦值列,例如下面的其中val1
和val2
是值和其他一切描述的那些值:骨料(總和)數據幀在單個列或多指標水平
In [58]: countries = ['X', 'Y', 'Z']; sectors = ['A', 'B', 'C']
In [59]: ch = np.random.choice
In [61]: df = pd.DataFrame(dict(c=ch(countries, 100), s1=ch(sectors, 100), s2=ch(sectors, 100), is_good=ch([True, False], 100), val1=np.random.random(100), val2=np.random.random(100)))
In [62]: df.head()
Out[62]:
c is_good s1 s2 val1 val2
0 Z True B B 0.694949 0.145197
1 X True A A 0.319551 0.548003
2 X False A C 0.946967 0.220035
3 X False B A 0.998087 0.902530
4 Y False B C 0.303517 0.660556
說我對一個值是否「好」不感興趣,所以我想總結is_good
上的值列。
一般情況下我會怎麼做:
In [63]: df.set_index(['c', 's1', 's2', 'is_good']).sum(level=['c', 's1', 's2'])
Out[63]:
val1 val2
c s1 s2
X A A 2.170132 1.999072
B 2.038995 3.528096
C 4.041300 3.150400
B A 2.418448 2.011886
B 1.212810 1.489008
C 0.284823 0.961956
,但是當有大量的描述性的列這變得有點笨拙,而且容易出錯。 (這裏的情況很好,但是如果還有其他情況的話,這可能會很艱難。)
我真的很想找一個指定is_good
列的操作,而不是specifying everything but that column。
+1使用'df.columns.difference'。以前從未見過!如果c不在(some_list)中,我總是這樣做'[c for df.columns]''但是這樣很光滑!你甚至不需要'set()'位。 – LondonRob
是的,你也可以在'&, - ,|,^'這樣的索引上使用set操作,但是存在棄用警告。它建議使用命名方法,例如'.intersection,.diff,.union,.sym_diff'等。我編輯了答案以刪除不必要的'set'調用 – JoeCondron
爲了澄清,所有這些操作都可以在行和列索引上完成 – JoeCondron