我对熊猫还很陌生,我只想检查是否可以进行以下操作:
我有一个看起来像这样的数据框:
Date Hour id id_a id_b id_c id_d id_e
2019-12-05 05 123 True False True False False
2019-12-05 05 124 False False True False True
2019-12-05 05 125 True False False False False
...
在excel中,我可以过滤值以仅显示True
或False
值,这将更改所有视图并仅显示右列。我可以过滤多个列并获得所需的视图。例如,id_a
和id_b
设置为True
,id_e
设置为False
,其他列未过滤或不接受True
或False
值。例如,将id_a
设置为True
进行过滤会删除第二个条目:
Date Hour id id_a id_b id_c id_d id_e
2019-12-05 05 123 True False True False False
2019-12-05 05 125 True False False False False
...
[如果有可能使用带有pandas函数的pandas数据框或简单的python或任何库来获得以下内容:
a)如果将id_a,id_b设置为false且id_c和id_d接受任何值且id_e为true,则返回存在的数据帧的长度
b)返回True
和False
语句的任意组合。
谢谢您的建议。
boolean
列:df1 = df.select_dtypes(bool)
或按位置列:
df1 = df.iloc[:, 3:] print (df1) id_a id_b id_c id_d id_e 0 True False True False False 1 False False True False True 2 True False False False False
然后是链式口罩:
m = ~df['id_a'] & ~df['id_b'] & df['id_e'] print (m) 0 False 1 True 2 False dtype: bool
对于计数True
,请使用sum
:
print (m.sum()) 1
如果要计算True
s和False
s:
df2 = df1.apply(pd.value_counts).fillna(0).astype(int) print (df2) id_a id_b id_c id_d id_e False 1 3 1 3 2 True 2 0 2 0 1
并且还要在计数之前按某些列数据进行过滤:
mask = df['id_a'] df3 = df1[mask].apply(pd.value_counts).fillna(0).astype(int) print (df3) id_a id_b id_c id_d id_e False 0 2 1 2 2 True 2 0 1 0 0