首页 > 解决方案 > Pandas 合并数据框列

问题描述

我的输入数据框是:

df1

Grp       A       B       C
Men       10      15      14
Women     4       6       5
Baby      3       5       15

df2

Grp       Upper_A    Lower_A       Upper_B    Lower_B       Upper_C   Lower_C
Men       10         1             9          2             15        2
Women     6          4             10         4             10        3
Baby      5          3             15         7             6         3

期望的输出是;

Grp      Features    Values   Upper_values  Lower_values    Evaluation
Men      A           10       10            1               True
Men      B           15       9             2               False
Men      C           14       15            2               True
Women    A           4        6             4               True
Women    B           6        10            4               True
Women    C           5        10            6               True
Baby     A           3        5             3               True
Baby     B           5        15            7               False
Baby     C           15       6             3               False

你能帮我解决这个问题吗?PS:评估列是根据是否在上下值之间分配的。

标签: pythonpandasdataframemerge

解决方案


解决方案是通过使用列拆分创建MultiIndex回来并通过以下方式重塑DataFrame.stack

df2.columns = df2.columns.str.split('_', expand=True)

df2 = df2.stack().rename_axis(('Grp','Features'))

然后以相同的方式处理并使用第二个df1创建一列DataFrame, 最后用于新列:Series.to_frameDataFrame.joindf2Series.between

df1 = df1.rename_axis('Features', axis=1).stack().to_frame('Values')

df = df1.join(df2).reset_index()
df['Evaluation'] = df['Values'].between(df['Lower'], df['Upper'])
print (df)
     Grp Features  Values  Lower  Upper  Evaluation
0    Men        A      10      1     10        True
1    Men        B      15      2      9       False
2    Men        C      14      2     15        True
3  Women        A       4      4      6        True
4  Women        B       6      4     10        True
5  Women        C       5      3     10        True
6   Baby        A       3      3      5        True
7   Baby        B       5      7     15       False
8   Baby        C      15      3      6       False

推荐阅读