2017-12-10 3 views
0

Ich habe einen Datenrahmen mit diesen Werten:Wie pandas oder pyspark Dataframe Werte in Spalten zu filtern?

+--------+-------+--------------+-----+ 
|tag_html|tag_css|tag_javascript|count| 
+--------+-------+--------------+-----+ 
|  0.0| 0.0|   0.0| 8655| 
|  1.0| 0.0|   0.0| 141| 
|  0.0| 0.0|   1.0| 782| 
|  1.0| 0.0|   1.0| 107| 
|  0.0| 1.0|   0.0| 96| 
|  0.0| 1.0|   1.0| 20| 
|  1.0| 1.0|   1.0| 46| 
|  1.0| 1.0|   0.0| 153| 
+--------+-------+--------------+-----+ 

ich die Zeilen wollen, wo „1“ nicht wie dies geschehen ist dies

+--------+-------+--------------+-----+ 
|tag_html|tag_css|tag_javascript|count| 
+--------+-------+--------------+-----+ 
|  1.0| 0.0|   0.0| 141| 
|  0.0| 0.0|   1.0| 782| 
|  0.0| 1.0|   0.0| 96| 

, was ich in den anderen Spalten wiederholt, wobei die Funktion where()

df['count'].where(((asdf['tag_html'] == 1) | (asdf['tag_css'] == 0) | (asdf['tag_javascript'] == 0)) & 
       ((asdf['tag_html'] == 0) | (asdf['tag_css'] == 1) | (asdf['tag_javascript'] == 0)) & 
       ((asdf['tag_html'] == 0) | (asdf['tag_css'] == 0) | (asdf['tag_javascript'] == 1))) 

dies ist das Ergebnis

0 8655.0 
1  141.0 
2  782.0 
3  NaN 
4  96.0 
5  NaN 
6  46.0 
7  NaN 

Gibt es einen besseren Weg, dies in Pandas oder Pyspark zu tun?

Antwort

0

Durch die Verwendung von mask und Boolesche Index

df=df.assign(count=df['count'].mask(df.iloc[:,:3].eq(1).sum(1).gt(1))) 
df 
Out[513]: 
    tag_html tag_css tag_javascript count 
0  0.0  0.0    0.0 8655.0 
1  1.0  0.0    0.0 141.0 
2  0.0  0.0    1.0 782.0 
3  1.0  0.0    1.0  NaN 
4  0.0  1.0    0.0 96.0 
5  0.0  1.0    1.0  NaN 
6  1.0  1.0    1.0  NaN 
7  1.0  1.0    0.0  NaN 
Verwandte Themen