2012-08-09 116 views
21

我正在使用通過pandas軟件包從h5文件加載的調查數據作爲hdf = pandas.HDFStore('Survey.h5')。在此DataFrame中,所有行都是單個調查的結果,而列是單個調查中所有問題的答案。按行劃分Pandas DataFrame

我的目標,以這個數據集減少到一個較小的DataFrame包括只在某個問題有一定描繪的答案,即在此列所有相同值的行。我能夠確定這個條件下所有行的索引值,但我找不到如何刪除這行或使用這些行只有一個新的DF。

回答

32
In [36]: df 
Out[36]: 
    A B C D 
a 0 2 6 0 
b 6 1 5 2 
c 0 2 6 0 
d 9 3 2 2 

In [37]: rows 
Out[37]: ['a', 'c'] 

In [38]: df.drop(rows) 
Out[38]: 
    A B C D 
b 6 1 5 2 
d 9 3 2 2 

In [39]: df[~((df.A == 0) & (df.B == 2) & (df.C == 6) & (df.D == 0))] 
Out[39]: 
    A B C D 
b 6 1 5 2 
d 9 3 2 2 

In [40]: df.ix[rows] 
Out[40]: 
    A B C D 
a 0 2 6 0 
c 0 2 6 0 

In [41]: df[((df.A == 0) & (df.B == 2) & (df.C == 6) & (df.D == 0))] 
Out[41]: 
    A B C D 
a 0 2 6 0 
c 0 2 6 0 
+0

是可以切片數據框,說(C = 5或c = 6)所示:---> DF [((df.A == 0)&(df.B == 2)&(df.C == 5 or 6)&(df.D == 0))] – yoshiserry 2014-12-05 03:53:51

+0

df [((df.A = =(df.B == 2)&df.C.isin([5,6])&(df.D == 0))]或df [((df.A == 0)& df.B == 2)&((df.C == 5)|(df.C == 6))&(df.D == 0))] – 2014-12-05 07:52:15

2

如果您已經知道索引可以使用.loc

In [12]: df = pd.DataFrame({"a": [1,2,3,4,5], "b": [4,5,6,7,8]}) 

In [13]: df 
Out[13]: 
    a b 
0 1 4 
1 2 5 
2 3 6 
3 4 7 
4 5 8 

In [14]: df.loc[[0,2,4]] 
Out[14]: 
    a b 
0 1 4 
2 3 6 
4 5 8 

In [15]: df.loc[1:3] 
Out[15]: 
    a b 
1 2 5 
2 3 6 
3 4 7