根据条件从另一个数据框列中获取值

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

以上是关于根据条件从另一个数据框列中获取值的主要内容,如果未能解决你的问题,请参考以下文章

用另一个值替换熊猫数据框列中的几个值

Python - 使用 +/- 振荡值迭代数据框并根据条件创建新列

根据其他列中描述的范围填充数据框列

根据另一列的值过滤数据框列[重复]

根据其他列值从数据框列中的列表中删除最后一个元素

根据月份日期列查找数据框列中每个因素的平均值[重复]