gpt4 book ai didi

python - 多种选择的列与 pandas 数据框的智能合并

转载 作者:行者123 更新时间:2023-12-01 08:02:09 25 4
gpt4 key购买 nike

意见库的结果以 CSV 格式存储,其中具有多个答案的问题用 0 和 1 进行编码。例如,如果问题“您最喜欢哪种颜色?”向 100 个人询问,可能的答案仅限于红、蓝、绿,结果如

colors = ['red', 'blue', 'green']
votes = [33, 57, 10]

将通过三列存储:一列代表包含 33 个 1 和 67 个 0 的“红色”答案,一列代表包含 57 个 1 和 43 个 0 的“蓝色”答案,一列代表包含 10 个 1 和 90 个 0 的“绿色”答案。

我想转换我的数据框,以便将这三列合并为一个包含“红色”、“蓝色”和“绿色”出现的唯一列。

这是我的问题的简化示例:

from pandas import DataFrame

actual_pool = {'foo': [0, 1, 2, 3, 4, 5, 6, 7],
'red': [1, 0, 0, 1, 0, 1, 0, 0],
'blue': [0, 1, 0, 0, 0, 0, 1, 1],
'green': [0, 0, 1, 0, 1, 0, 0, 0],
'bar': ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']}

actual_df = DataFrame(actual_pool,columns= ['foo', 'red', 'blue', 'green', 'bar'])

expected_pool = {'foo': [0, 1, 2, 3, 4, 5, 6, 7],
'colors': ['red', 'blue', 'green', 'red', 'green', 'red', 'blue', 'blue'],
'bar': ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']}

expected_df = DataFrame(expected_pool,columns= ['foo', 'colors', 'bar'])

print(actual_df)
print(expected_df)

问题是如何使用pandas从actual_df获取expected_df?

编辑1:添加列“foo”和“bar”,因为我对合并数据框列的子集感兴趣。

最佳答案

使用DataFrame.idmax获取具有最大值的列名称:

actual_pool = {'red': [1, 0, 0, 1, 0, 1, 0, 0],
'blue': [0, 1, 0, 0, 0, 0, 1, 1],
'green': [0, 0, 1, 0, 1, 0, 0, 0]}

actual_df = DataFrame(actual_pool,columns= ['red', 'blue', 'green'])

actual_df['colors'] = actual_df.idxmax(axis=1)

print(actual_df)

输出:

  red  blue  green   colors                                                                                                            
0 1 0 0 red
1 0 1 0 blue
2 0 0 1 green
3 1 0 0 red
4 0 0 1 green
5 1 0 0 red
6 0 1 0 blue
7 0 1 0 blue

如果您有额外的列

from pandas import DataFrame

actual_pool = {'red': [1, 0, 0, 1, 0, 1, 0, 0],
'blue': [0, 1, 0, 0, 0, 0, 1, 1],
'green': [0, 0, 1, 0, 1, 0, 0, 0],
'pink': [12,0,11,2,0,90,0,12]
}

actual_df = DataFrame(actual_pool,columns= ['red', 'blue', 'green'])

actual_df['colors'] = actual_df[['red','blue','green']].idxmax(axis=1)

print(actual_df)

关于python - 多种选择的列与 pandas 数据框的智能合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55686355/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com