[英]Efficient way to replace column of lists by matches with another data frame in Pandas
我有一個熊貓數據框,看起來像:
col11 col12
X ['A']
Y ['A', 'B', 'C']
Z ['C', 'A']
另一個看起來像:
col21 col22
'A' 'alpha'
'B' 'beta'
'C' 'gamma'
我想更換col12
在基地col22
在一個有效的方式,並得到,因此:
col31 col32
X ['alpha']
Y ['alpha', 'beta', 'gamma']
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
:
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
具有默認索引
31 32
0 X [alpha]
1 Y [alpha, beta, gamma]
2 Z [gamma, alpha]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.