2024-10-01 07:41:58 发布
网友
我有一个熊猫数据框,看起来像:
col11 col12 X ['A'] Y ['A', 'B', 'C'] Z ['C', 'A']
另一个看起来像:
col21 col22 'A' 'alpha' 'B' 'beta' 'C' 'gamma'
我想以一种有效的方式替换基于col22的col12,并得到以下结果:
col22
col12
col31 col32 X ['alpha'] Y ['alpha', 'beta', 'gamma'] Z ['gamma', 'alpha']
我不确定这是最有效的方法,但您可以将DataFrame转换为dict,然后使用apply将键映射到值:
DataFrame
dict
apply
假设第一个DataFrame是df1,第二个是df2:
df1
df2
df_dict = dict(zip(df2['col21'], df2['col22'])) df3 = pd.DataFrame({"31":df1['col11'], "32": df1['col12'].apply(lambda x: [df_dict[y] for y in x])})
或者如@jezrael所建议的嵌套列表理解:
df3 = pd.DataFrame({"31":df1['col11'], "32": [[df_dict[y] for y in x] for x in df1['col12']]})
注意:df3有一个默认索引
df3
31 32 0 X [alpha] 1 Y [alpha, beta, gamma] 2 Z [gamma, alpha]
一种解决方案是使用索引序列作为具有列表理解的映射器:
import pandas as pd df1 = pd.DataFrame({'col1': ['X', 'Y', 'Z'], 'col2': [['A'], ['A', 'B', 'C'], ['C', 'A']]}) df2 = pd.DataFrame({'col21': ['A', 'B', 'C'], 'col22': ['alpha', 'beta', 'gamma']}) s = df2.set_index('col21')['col22'] df1['col2'] = [list(map(s.get, i)) for i in df1['col2']]
结果:
col1 col2 0 X [alpha] 1 Y [alpha, beta, gamma] 2 Z [gamma, alpha]
我不确定这是最有效的方法,但您可以将
DataFrame
转换为dict
,然后使用apply
将键映射到值:假设第一个
DataFrame
是df1
,第二个是df2
:或者如@jezrael所建议的嵌套列表理解:
注意:
df3
有一个默认索引一种解决方案是使用索引序列作为具有列表理解的映射器:
结果:
相关问题 更多 >
编程相关推荐