我有以下DataFrame
:
2010-01-03 2010-01-04 2010-01-05 2010-01-06 2010-01-07
1560 0.002624 0.004992 -0.011085 -0.007508 -0.007508
14 0.000000 -0.000978 -0.016960 -0.016960 -0.009106
2920 0.000000 0.018150 0.018150 0.002648 0.025379
1502 0.000000 0.018150 0.011648 0.005963 0.005963
78 0.000000 0.018150 0.014873 0.014873 0.007564
我有与我要从DataFrame
中删除的行对应的索引列表。为简单起见,假设我的列表是idx_to_drop = [1560,1502]
,它对应于上面daraframe中的第1行和第4行。
我尝试运行df2 = df.drop(df.index[idx_to_drop])
,但这需要行号而不是.ix()
索引值。我有更多行和更多列,使用where()
函数获取行号需要一段时间。
如何删除.ix()
匹配的行?
答案 0 :(得分:4)
我会通过将问题分成两部分来解决这个问题。掩盖你要找的东西,然后再选择反面。
简短回答:
let
使用isin:
对runnable示例进行说明df[~df.index.isin([1560, 1502])]
你可以看到我们已经确定了两个坏行,然后我们想要选择所有不是坏行的行。我们的掩码是否为坏行,而所有其他行都是不是掩码的任何行(import pandas as pd
df = pd.DataFrame({'index': [1, 2, 3, 1500, 1501],
'vals': [1, 2, 3, 4, 5]}).set_index('index')
bad_rows = [1500, 1501]
mask = df.index.isin(bad_rows)
print mask
[False False False True True]
df[mask]
vals
index
1500 4
1501 5
print ~mask
[ True True True False False]
df[~mask]
vals
index
1 1
2 2
3 3
)