【问题标题】:Create dataframe out of multiple dataframes从多个数据帧中创建数据帧
【发布时间】:2021-12-13 02:38:34
【问题描述】:

我想从我拥有的 3 个原始数据帧中创建一个新数据帧。 3 个数据帧的格式为:Name|col1|col2。所有数据帧的名称都相同,不同之处在于 col1col2 的值。

df1:

abc  1  2
xyz  3  4

df2:

abc  5  6
xyz  7  8

df3:

abc  9  10
xyz  11  12

新的数据框应该有格式:

abc(df1,df2)  1  6
abc(df1,df3)  1  10
abc(df2,df3)  5  10
abc(df3,df1)  5  2
abc(df3,df1)  9  2
abc(df3,df2)  9  6
xyz(df1,df2)  3  8
xyz(df1,df3)  3  12
xyz(df2,df1)  7  4
xyz(df2,df3)  7  12
xyz(df3,df1)  11  4
xyz(df3,df2)  11  8

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    这应该可以解决问题,您可能需要再添加几个步骤才能获得所需的格式,但制作它的逻辑就在那里。

    df1['key'] = 'df1'
    df2['key'] = 'df2'
    df3['key'] = 'df3'
    
    
    (pd.merge(
        pd.concat([df1, df2, df3]), 
        pd.concat([df1, df2, df3]), 
        on  = 0).
    query('key_x != key_y').
    drop(columns = ['2_x', '1_y']))
    

    假设您当前的 df 列被称为 0 到 2

    这会让你:

          0  1_x key_x  2_y key_y
    1   abc    1   df1    6   df2
    2   abc    1   df1   10   df3
    3   abc    5   df2    2   df1
    5   abc    5   df2   10   df3
    6   abc    9   df3    2   df1
    7   abc    9   df3    6   df2
    10  xyz    3   df1    8   df2
    11  xyz    3   df1   12   df3
    12  xyz    7   df2    4   df1
    14  xyz    7   df2   12   df3
    15  xyz   11   df3    4   df1
    16  xyz   11   df3    8   df2
    

    【讨论】:

    • 顺便说一句,为了获得您在问题中想要的x(y,x)-style 输出,您可以添加这一行:df.insert(0, 'my_col', df['0'] + '(' + df['key_x'] + ',' + df['key_y'] + ')'),然后添加这一行:df.drop(['key_x', 'key_y'], axis=1, inplace=True)跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-12
    • 2022-08-06
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 2020-09-18
    • 1970-01-01
    相关资源
    最近更新 更多