繁体   English   中英

根据数据框中另一列的值为列表中的数据框列分配值

[英]Assigning values to dataframe columns from a list based on value of another column in dataframe

根据数据框中另一列的值为列表中的数据框列分配值

我有两个数据帧,df1 和 df2,其中

df1 = pd.DataFrame(np.array([['a', 'b', 'c','d'], [1, 2, 3, 4]]),
                   columns=['x', 'y'])


df2 = pd.DataFrame(np.array([['a', 'b', 'c', 'a', 'c', 'b','b'], [4, 5, 6, 1, 32, 1, 8]]),
                   columns=['x', 'z'])


我想创建一个基于 df2 的数据框 df3,并分配了适当的 df1['y'] 值。 例如,我希望结果如下所示:

df3 = pd.DataFrame(np.array([['a', 'b', 'c', 'a', 'c', 'b','b'], [4, 5, 6, 1, 32, 1, 8] , [1, 2, 3, 1, 3, 2, 2 ] ]),
                   columns=['x', 'z', 'y'])

在我的实际情况中,x 有数千个可能的值,因此if df3['x'] == a: df3['y'] = 1可能,我想避免if df3['x'] == a: df3['y'] = 1样式解决方案。

您可以通过合并实现此目的:

df3 = df2.merge(df1, how="left", on="x")

设置:

import pandas as pd
import numpy as np

data={'x':['a', 'b', 'c','d'],
      'y':[1, 2, 3, 4]}
df1 = pd.DataFrame(data)

data2={'x':['a', 'b', 'c', 'a', 'c', 'b','b'],
       'z':[4, 5, 6, 1, 32, 1, 8]}
df2 = pd.DataFrame(data2)

data3={'x':['a', 'b', 'c', 'a', 'c', 'b','b'],
       'z':[4, 5, 6, 1, 32, 1, 8]}
df3 = pd.DataFrame(data3)

字典法:

# Make a dictionary
dict = df1.set_index('x').to_dict()
# Map to dictionary
df3 = df2.assign(x=df2['x'].map(*dict.values()))

您必须解压缩dict因为它实际上是 2 个dict ,但您只想要第二个。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM