我有一個df
其中包含我的主數據有一百萬rows
。我的主要數據也有30 columns
。現在我想添加另一列到我的df
,名爲category
。 category
是df2
中的column
,其包含約700 rows
和另兩個columns
,其將與df
中的兩個columns
匹配。熊貓根據另一個數據框中的匹配列填充新的數據幀列
我首先設定df2
的index
和df
將在幀之間的匹配,但在df2
一些index
的不df
存在。
df2
中的其餘列稱爲AUTHOR_NAME
和CATEGORY
。
df
中的相關列被稱爲AUTHOR_NAME
。
AUTHOR_NAME
的一些df
在df2
中不存在,反之亦然。
我想要的指令是:當index
在df
在df2
比賽與index
和title
在df
與df2
title
比賽,加category
到df
,否則在category
添加NaN的。
示例數據:
df2
AUTHOR_NAME CATEGORY
Index
Pub1 author1 main
Pub2 author1 main
Pub3 author1 main
Pub1 author2 sub
Pub3 author2 sub
Pub2 author4 sub
df
AUTHOR_NAME ...n amount of other columns
Index
Pub1 author1
Pub2 author1
Pub1 author2
Pub1 author3
Pub2 author4
expected_result
AUTHOR_NAME CATEGORY ...n amount of other columns
Index
Pub1 author1 main
Pub2 author1 main
Pub1 author2 sub
Pub1 author3 NaN
Pub2 author4 sub
如果我用我的df2.merge(df,left_index=True,right_index=True,how='left', on=['AUTHOR_NAME'])
成爲df
大三倍比它應該是。
所以我認爲也許合併是這樣做的錯誤方式。我真正想要做的是使用df2
作爲查找表,然後根據是否滿足某些條件將type
的值返回到df
。
def calculate_category(df2, d):
category_row = df2[(df2["Index"] == d["Index"]) & (df2["AUTHOR_NAME"] == d["AUTHOR_NAME"])]
return str(category_row['CATEGORY'].iat[0])
df.apply(lambda d: calculate_category(df2, d), axis=1)
然而,這將引發我一個錯誤:
IndexError: ('index out of bounds', u'occurred at index 7614')
我不知道,如果'on'和'left_index/right_index'一起工作。也許你需要'on = ['Index','AUTHOR_NAME']'(或類似的東西)。我不確定哪個數據幀留在'df2.merge(df,...)'中。也許你需要'如何=「右'」或'pd.merge(左= df,右= df2,...)' – furas