如何与熊猫数据框中的键和键列表合并
Posted
技术标签:
【中文标题】如何与熊猫数据框中的键和键列表合并【英文标题】:how can merge with key and list of keys in pandas dataframe 【发布时间】:2022-01-17 13:55:07 【问题描述】:df1 中有一个键,df2 有一个包含键列表的列
df1 = pd.DataFrame("key": ["D0", "D1", "D3", "D5", "D7"])
df2 = pd.DataFrame("keys" : [['D0','D1','D2'], ['D1','D2','D5'], ['D6','D7','D8'], ['D9','D10','D11', 'D12']],
"value" : [10, 20, 30, 40])
df1:
key
0 D0
1 D1
2 D3
3 D5
4 D7
df2:
keys value
0 [D0, D1, D2] 10
1 [D1, D2, D5] 20
2 [D6, D7, D8] 30
3 [D9, D10, D11, D12] 40
我想使用 'key' 列和 'keys' 列合并 df1 和 df2 并保留 'first' 以防重复值(例如 'D1')
df3:
key value
0 D0 10.0
1 D1 10.0
2 D3 NaN
3 D5 20.0
4 D7 30.0
【问题讨论】:
【参考方案1】:使用explode
和merge
:
df3 = df1.merge(df2.explode('keys'), left_on='key', right_on='keys', how='left') \
.drop_duplicates('key').drop(columns='keys')
print(df3)
# Output:
key value
0 D0 10.0
1 D1 10.0
3 D3 NaN
4 D5 20.0
5 D7 30.0
另一种方式,使用explode
和map
:
df3 = df1.assign(value=df1['key'].map(df2.explode('keys').drop_duplicates('keys') \
.set_index('keys')['value']))
print(df3)
# Output:
key value
0 D0 10.0
1 D1 10.0
2 D3 NaN
3 D5 20.0
4 D7 30.0
【讨论】:
非常感谢...我不知道爆炸。【参考方案2】:将DataFrame.join
与DataFrame.explode
和GroupBy.first
一起使用:
df = df1.join(df2.explode('keys').groupby('keys').first(), on='key')
print (df)
key value
0 D0 10.0
1 D1 10.0
2 D3 NaN
3 D5 20.0
4 D7 30.0
【讨论】:
效果很好,谢谢。以上是关于如何与熊猫数据框中的键和键列表合并的主要内容,如果未能解决你的问题,请参考以下文章