簡體   English   中英

合並來自兩個不同軸的 Pandas 數據幀的數據?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM