Python:通过比较不同的数据帧列来获取值

时间:2017-08-03 13:47:15

标签: python numpy dataframe

我需要帮助,因为我试图通过比较不同的数据帧列来获取值。

首先,我尝试使用" for loop"达到目标,但我有数百万行,所以需要很多时间。 现在,我想以这种方式使用numpy.where:

我有2个数据框: - df1其中每行与其他行不同(列ID是唯一的主键) - > df1 [' ID',' status',' boolean'] - df2包含几行,每行与其他行不同 - >   df2 ['代码','分段','价值']

现在,我需要为dataframe1创建一个名为' weight'的新列。

我试图创建专栏' weight'这样:

df1['weight'] = numpy.where(df1['boolean'] == 1, df2[ (df2['code']==df1['ID']) & (df2['segment']==df1['status'])] ['value'], 0)

列'代码' +'段'是一个唯一键,因此它只返回一个值。

程序执行显示此错误: " ValueError:只能比较带有相同标签的Series对象"

任何人都可以帮我理解吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

您可以使用左join

执行此操作

这样的事可能有用。没有样本数据,我无法详细检查

df_merged = df1.join(df2.set_index(['code', 'segment']), how='left', on=['ID', 'status'])
df1['weight'] = df_merged['value'].re_index(df1.index).fillna(0)

需要set_index()
on : column name, tuple/list of column names, or array-like
     

调用者中的列连接其他索引,否则加入index-on-index。如果给定的是多列,则传递的DataFrame必须具有MultiIndex。如果尚未包含在调用DataFrame中,则可以将数组作为连接键传递。像Excel VLOOKUP操作一样