我无法将两个数据帧标准化为合并的数据帧。本质上,我想以一个包含以下列的数据框结尾:year, country, net_activity_amount
,这是合并两个数据框的结果,一个包含year, donor_country, commitment_amount_usd
,另一个包含year, receiving_country, commitment_amount_usd
。我目前正在获得一个重复了一年的数据框,并且某些国家/地区仅存在于一个或另一个数据框中,这就是outerjoin
的原因。
这是我当前拥有的示例行:1977, Saudi Arabia, 3000000, Saudi Arabia, 3000000, 0
我如何有效地做到这一点?
def clean_data():
raw_data = get_raw_data()
donor_df = raw_data[['year', 'donor', 'commitment_amount_usd_constant']]
recip_df = raw_data[['year', 'recipient', 'commitment_amount_usd_constant']]
merged_df = donor_df.merge(recip_df, how='outer', left_on=["year", "donor"], right_on=["year", "recipient"])
merged_df = merged_df.fillna(0)
merged_df['net_donation_activity'] = merged_df.apply(lambda row: calc_net_value(row), axis=1)
print(merged_df)
def get_raw_data():
return pd.read_csv('aiddata-countries-only.csv')
def calc_net_value(row):
# lambda for calculating net diff
return float(row['commitment_amount_usd_constant_x'] - row['commitment_amount_usd_constant_y'])
def normalize_data(row):
return []