Python 按列选择并删除列
从数据帧的一列中选择一个特定的值似乎是一种非常常见的活动,这会使该列变得多余。我总是在之后立即明确地删除该列 这在布尔列中尤其明显:Python 按列选择并删除列,python,pandas,Python,Pandas,从数据帧的一列中选择一个特定的值似乎是一种非常常见的活动,这会使该列变得多余。我总是在之后立即明确地删除该列 这在布尔列中尤其明显: 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
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
我现在只想与好的价值观一起工作,所以我做到了:
In [30]: df[df.is_good].drop('is_good', axis=1).head()
Out[30]:
c s1 s2 val1 val2
0 Y B C 0.265542 0.410853
2 Z C C 0.216049 0.407230
4 Z B C 0.209100 0.856136
5 X B B 0.351570 0.461769
7 X A B 0.516026 0.209944
但感觉应该有一种方法来做到这一点,而不需要明确地放弃它。你可以做:
In [31]: df.set_index('is_good').ix[True].head()
Out[31]:
c s1 s2 val1 val2
is_good
True Y B C 0.265542 0.410853
True Z C C 0.216049 0.407230
True Z B C 0.209100 0.856136
True X B B 0.351570 0.461769
True X A B 0.516026 0.209944
我真的很喜欢它的感觉,但是它的索引很混乱
我也很想做:
In [42]: df.groupby('is_good').get_group(True).head()
Out[42]:
c is_good s1 s2 val1 val2
0 Y True B C 0.265542 0.410853
2 Z True C C 0.216049 0.407230
4 Z True B C 0.209100 0.856136
5 X True B B 0.351570 0.461769
7 X True A B 0.516026 0.209944
但是好专栏还在那里
我错过了什么吗?这里有一种方法。其想法是建立一个多级索引,并使用.xs进行选择,将自动降低一级
df.set_index('is_good', append=True).xs(True, level='is_good')
c s1 s2 val1 val2
0 Z A B 0.1352 0.9529
3 X A A 0.5531 0.5571
8 Y B C 0.7401 0.0288
12 Y B B 0.4117 0.3606
16 X C A 0.7138 0.7112
18 Y C C 0.6342 0.3654
26 Y C A 0.9927 0.9493
28 Z C B 0.6059 0.5674
.. .. .. .. ... ...
80 Z B A 0.2772 0.1103
83 Y C B 0.6060 0.7179
85 Z B B 0.2914 0.3398
86 X A B 0.4753 0.0029
91 Y B A 0.9477 0.5383
92 X B B 0.9784 0.9479
95 Y A C 0.1813 0.9646
96 Y B B 0.8365 0.2424
[45 rows x 5 columns]
那太好了。它通过了我在OP中提到的感觉正确的测试。