【问题标题】:Combining data from two Pandas dataframes with different axes?将来自具有不同轴的两个 Pandas 数据框的数据结合起来?
【发布时间】:2021-10-09 04:01:15
【问题描述】:

我有一个数据框,其中的列包含月度数据:

ID Jan Feb Mar so on...
1 valJ1 valF1 valM1 ...
2 valJ2 valF2 valM2 ...

以及另一个数据框,其中月份在列中给出(其中 1 = 一月,2 = 三月,...):

Month ID data1 data2
1 1 num num
2 1 num num
3 1 num num
4 1 num num
1 2 num num
2 2 num num
3 2 num num
4 2 num num

如何编写一个函数来组合这些数据:

Month ID data1 data2 DF1
1 1 num num valJ1
2 1 num num valF1
3 1 num num valM1
4 1 num num valA1
1 2 num num valJ2
2 3 num num valF2
3 2 num num valM2
4 2 num num valA2

我申请了一个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)

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    使用melt 将您的第一个数据框转换为第二个merge 的形状。在您只需要字典将月份编号映射到缩写月份名称之前:

    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'])
    

    输出:

    >>> 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-21
      • 2018-12-04
      • 2015-04-30
      • 1970-01-01
      • 2021-07-28
      • 2019-12-16
      • 1970-01-01
      • 2014-08-17
      相关资源
      最近更新 更多