我有多列仅包含 0 或 1。
苹果 | 橙色 | 梨子 |
---|---|---|
1 | 0 | 1 |
0 | 0 | 1 |
1 | 1 | 0 |
我想计算并输入新数据框中每列的 0(在“错误”列中)和 1(在“正确”列中)的数量,并将它们总计到如下表中。
水果 | 正确 | 错了 |
---|---|---|
苹果 | 2 | 1 |
橙色 | 1 | 2 |
梨子 | 2 | 1 |
我尝试了 value_counts()、groupby() 和 pandas.pivot_table 的混合,但卡在了表的操作上。
如果您的数据框是:
data = {
"Apple": [1, 0, 1],
"Orange": [0, 0, 1],
"Pear": [1, 1, 0]
}
df = pd.DataFrame(data)
你可以这样做:
value_counts = df.apply(lambda col: col.value_counts()).T
counts = value_counts.rename(columns={1: "Correct", 0: "Wrong"})
counts = counts.reset_index().rename(columns={"index": "Fruit"})
输出:
下面的代码首先迭代列 (
.apply(..., axis=0)
),返回每列 [num. of 0, num of 1]
的列表。新数据帧的行和列被交换(.T
)以获得水果名称作为行,最后列被重命名为“正确”和“错误”。
import pandas as pd
df = pd.DataFrame({'apple': [1, 0, 1], 'orange': [0, 0, 1], 'pear': [1, 1, 0]})
new_df = df.apply(
lambda x: [ (x==0).sum(), (x==1).sum()],
axis=0
).T.rename(columns={1: 'correct', 0: 'wrong'})