根据条件从另一个数据框列中获取值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了根据条件从另一个数据框列中获取值相关的知识,希望对你有一定的参考价值。
我有一个如下数据框:
>>> df1
a b
0 [1, 2, 3] 10
1 [4, 5, 6] 20
2 [7, 8] 30
和另一个像:
>>> df2
a
0 1
1 2
2 3
3 4
4 5
如果df2的列'a'值在coulmn'a'df1中,我需要在df1的列'b'中在df2中创建列'c'。在df1中,列'a'的每个元组都是一个列表。
我试图从以下网址实现,但到目前为止没有任何结果:https://medium.com/@Imaadmkhan1/using-pandas-to-create-a-conditional-column-by-selecting-multiple-columns-in-two-different-b50886fabb7d
期待结果是
>>> df2
a c
0 1 10
1 2 10
2 3 10
3 4 20
4 5 20
答案
通过将Series.map
中的值展平为字典来使用df1
:
d = c: b for a, b in zip(df1['a'], df1['b']) for c in a
print (d)
1: 10, 2: 10, 3: 10, 4: 20, 5: 20, 6: 20, 7: 30, 8: 30
df2['new'] = df2['a'].map(d)
print (df2)
a new
0 1 10
1 2 10
2 3 10
3 4 20
4 5 20
编辑:我认为问题是列a
列表中的混合整数,解决方案是使用if / else来测试新词典:
d =
for a, b in zip(df1['a'], df1['b']):
if isinstance(a, list):
for c in a:
d[c] = b
else:
d[a] = b
df2['new'] = df2['a'].map(d)
另一答案
使用 :
m=pd.DataFrame('a':np.concatenate(df.a.values),'b':df.b.repeat(df.a.str.len()))
df2.merge(m,on='a')
a b
0 1 10
1 2 10
2 3 10
3 4 20
4 5 20
另一答案
首先我们unnest
列表df1到行,然后我们将它们合并到列a
:
df1 = df1.set_index('b').a.apply(pd.Series).stack().reset_index(level=0).rename(columns=0:'a')
print(df1, '\n')
df_final = df2.merge(df1, on='a')
print(df_final)
b a
0 10 1.0
1 10 2.0
2 10 3.0
0 20 4.0
1 20 5.0
2 20 6.0
0 30 7.0
1 30 8.0
a b
0 1 10
1 2 10
2 3 10
3 4 20
4 5 20
以上是关于根据条件从另一个数据框列中获取值的主要内容,如果未能解决你的问题,请参考以下文章