[英]Merge Two CSV Files With Cases Using Python
我需要按照流程中的一些規則將兩個數據文件合並在一起。 我稍微知道如何使用pandas來創建和合並csv,但我不知道如何遵循某些規則。
我有兩個文件作為示例:
actual_data.csv
type region_1 region_2 date data
aw west 2 10/01/2017 0.9318274971234
hss east 3 05/12/2015 0.7136487234972
. . . . .
. . . . .
. . . . .
forecast_data.csv
type region_1 region_2 date data
jad north 22 11/13/2025 0.71283741932
js east 3 04/16/2023 0.16238471239
. . . . .
. . . . .
. . . . .
我需要按照以下規則合並這些文件:
您需要在實際預測中進行左連接(這是基於您的要求,即如果您希望缺少預測數據,則需要填充缺少的實際數據,以進行外部連接)。
import pandas as pd
act_df = pd.read_csv(actual_data.csv)
fore_df = pd.read_csv(forecast_data.csv)
res = fore_df.merge(act_df, on=['type', 'region_1', 'region_2'], how='left', suffixes=('_fore', '_act'))
此時,res將具有合並列['type', region_1', region_2']
,2個日期列( date_fore
, date_act
)和2個數據列( data_fore
, date_act
)的date_act
。 從那里,您可以使用預測日期填充實際日期的空值,然后根據需要將其折疊為單個列:
res['date'] = res['date_act'].fillna(res['date_fore'])
res.drop(['date_fore', 'date_act'], axis=1, inplace=True)
對於數據,它是一個類似的操作:
res['data'] = res['data_act'].fillna(res['data_fore'])
res.drop(['data_fore', 'data_act'], axis=1, inplace=True)
combine_first
。 import numpy as np
import pandas as pd
df1 = pd.DataFrame({'a':[1,2,np.nan], 'b':['x','y','z']})
df2 = pd.DataFrame({'a':[1,3,4], 'b':['a','b','c']})
df = pd.DataFrame()
for col in df1.columns:
df[col] = df1[col].combine_first(df2[col])
df
輸出:
# df1
a b
0 1.0 x
1 2.0 y
2 NaN z
#df2
a b
0 1 a
1 3 b
2 4 c
#df
a b
0 1.0 x
1 2.0 y
2 4.0 z
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.