我想转换这个:
df = pd.DataFrame({
'Filter 1': ['False','False','False','False'],
'Filter 2': ['True','False','False','True'],
'Filter 3': ['True','True','True','True']
})
print(df)
Filter 1 Filter 2 Filter 3
----------------------------
0 False True True
1 False False True
2 False False True
3 False True True
进入:
result = pd.DataFrame({
'Filter': ['Filter 1', 'Filter 2', 'Filter 3'],
'True': [0,2,4],
'False': [4,2,0]
})
print(result)
Filter True False
------------------------
0 Filter 1 0 4
1 Filter 2 2 2
2 Filter 3 4 0
你能帮我吗?这是一个转换+计数值,我无法修复,也找不到
谨致问候!
这是值计数:
df.apply(pd.Series.value_counts).fillna(0).T
输出:
False True
Filter 1 4.0 0.0
Filter 2 2.0 2.0
Filter 3 0.0 4.0
我们也可以使用DataFrame.melt
+pd.crosstab
:
df2 = df.melt(var_name='Filter')
pd.crosstab(df2['Filter'], df2['value'], colnames=[None]).reset_index()
Filter False True
0 Filter 1 4 0
1 Filter 2 2 2
2 Filter 3 0 4
这里有一个使用stack
和groupby.value_counts
:
df.stack().groupby(level=1).value_counts().unstack(fill_value=0)
False True
Filter 1 4 0
Filter 2 2 2
Filter 3 0 4