如何根据Python中多列的行值创建新的数据框?

问题描述 投票:0回答:2

我有多列仅包含 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 的混合,但卡在了表的操作上。

python pandas numpy etl
2个回答
0
投票

如果您的数据框是:

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"})

输出:


0
投票

下面的代码首先迭代列 (

.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'})

© www.soinside.com 2019 - 2024. All rights reserved.