我需要帮助,因为我试图通过比较不同的数据帧列来获取值。
首先,我尝试使用" 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对象"
任何人都可以帮我理解吗?
谢谢。
答案 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操作一样