[英]Combining data from two Pandas dataframes with different axes?
我有一個 dataframe,其中列包含每月數據:
ID | 簡 | 二月 | 三月 | 很快... |
---|---|---|---|---|
1個 | valJ1 | valF1 | valM1 | ... |
2個 | valJ2 | valF2 | valM2 | ... |
和另一個 dataframe,其中月份在列中給出(其中 1 = 一月,2 = 三月,...):
月 | ID | 數據1 | 數據2 |
---|---|---|---|
1個 | 1個 | 數 | 數 |
2個 | 1個 | 數 | 數 |
3個 | 1個 | 數 | 數 |
4個 | 1個 | 數 | 數 |
1個 | 2個 | 數 | 數 |
2個 | 2個 | 數 | 數 |
3個 | 2個 | 數 | 數 |
4個 | 2個 | 數 | 數 |
我如何編寫 function 來組合這些數據,以便:
月 | ID | 數據1 | 數據2 | DF1 |
---|---|---|---|---|
1個 | 1個 | 數 | 數 | valJ1 |
2個 | 1個 | 數 | 數 | valF1 |
3個 | 1個 | 數 | 數 | valM1 |
4個 | 1個 | 數 | 數 | 值A1 |
1個 | 2個 | 數 | 數 | valJ2 |
2個 | 3個 | 數 | 數 | valF2 |
3個 | 2個 | 數 | 數 | valM2 |
4個 | 2個 | 數 | 數 | 值A2 |
我已經申請了一個 dataframe 但我不確定如何合並 2
months = ['Jan', 'Feb', 'Mar', 'Apr',...]
def fun(df2,months):
if df2['Month'] == 1:
val = df1[months[0]]
if df2['Month'] == 2:
val = df1[months[1]]
#and so on
return val
df2['DF1'] = pd.DataFrame(df2.apply(fun, axis=1)
使用melt
將第一個 dataframe 轉置為第二個的形狀,然后merge
它們。 在你只需要一個字典到 map 一個月份數字到縮寫月份名稱之前:
months = dict(zip(range(1, 4), ['Jan', 'Feb', 'Mar']))
out = pd.merge(df2.assign(Month=df2['Month'].map(months)),
df1.melt(id_vars='ID', var_name='Month', value_name='DF1'),
on=['Month', 'ID'])
Output:
>>> out
Month ID data1 data2 DF1
0 Jan 1 num num valJ1
1 Feb 1 num num valF1
2 Mar 1 num num valM1
3 Jan 2 num num valJ2
4 Feb 2 num num valF2
5 Mar 2 num num valM2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.