gpt4 book ai didi

python - 如何使用找到值的列标题创建第三列?

转载 作者:行者123 更新时间:2023-12-01 09:13:33 24 4
gpt4 key购买 nike

我需要浏览 df2 的列以查找 df1['Part No'] 中包含的值。我需要向 df1 添加一个新列,其中包含找到该值的列标题。

data1 = {"Part No": ['100', '101', '102'],
"Desc": ["Blue", "Green", "Red"]}

df1 = pd.DataFrame(data1)
df1 = df1[['Part No', 'Desc']]

data2 = {"col1": ['100', '101', 'a', 'b'],
"col2": ['102', 'c', 'd', 'e' ],
"col3": ['999', '1', '2', '0' ]}

df2 = pd.DataFrame(data2)

print(df1)
print('\r')
print(df2)
print('\r')

#My expected output:
data3 = {"Part No": ['100', '101', '102'],
"Desc": ["Blue", "Green", "Red"],
"New Col" : ['col1', 'col1', 'col2']}

df3 = pd.DataFrame(data3)
df3 = df3[['Part No', 'Desc', 'New Col']]
print(df3)

最佳答案

通过在 df2 上使用 unstack,并使用 reset_indexrename,您可以在一行上df2 的每个值及其所在列的名称:

(df2.unstack().reset_index(name='Part No')[['level_0','Part No']]
.rename(columns={'level_0':'New Col'}))
# if you print this, it looks like:
New Col Part No
0 col1 100
1 col1 101
2 col1 a
3 col1 b
4 col2 102
5 col2 c
6 col2 d
7 col2 e
8 col3 999
9 col3 1
10 col3 2
11 col3 0

df1df2之间进行合并,如上操作:

df3 = df1.merge((df2.unstack()
.reset_index(name='Part No')[['level_0','Part No']]
.rename(columns={'level_0':'New Col'}) ) ,how='left')

然后你得到df3:

  Part No   Desc New Col
0 100 Blue col1
1 101 Green col1
2 102 Red col2

编辑:@DSM提供了另一种解决方案来操作df2以获得相同的结果,使用melt而不是unstackreset_index 重命名:

df2.melt(value_name="Part No", var_name="New Col")

然后,

df3 = df1.merge(df2.melt(value_name="Part No", var_name="New Col") ,how='left')

给出预期的输出。

关于python - 如何使用找到值的列标题创建第三列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51446333/

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