Python panda 合并未按预期工作

问题描述 投票:0回答:1

Panda 合并未按预期工作

我正在使用此代码

import pandas as pd

data = {
    "Q1": [1, 2, 3, 4],
    "A2_1": [1, 2, 2, 1],
    "A2_2": [1, 1, 1, 1],
    "A2_3": [2, 2, 1, 1],
    "A2_4": [2, 2, 2, 1],
    "A3_1": [10, 25, 62, 18],
    "A3_2": [51, 51, 16, 17],
    "A3_3": [32, 23, 71, 31],
    "A3_4": [62, 52, 52, 11]
}

df = pd.DataFrame(data)

# Melt DataFrame for A2
melted_a2 = pd.melt(df, id_vars=["Q1"], value_vars=["A2_1", "A2_2", "A2_3", "A2_4"], var_name="A2", value_name="Value")

# Melt DataFrame for A3
melted_a3 = pd.melt(df, id_vars=["Q1"], value_vars=["A3_1", "A3_2", "A3_3", "A3_4"], var_name="A3", value_name="Value")

# Merge melted DataFrames on 'Q1'
result_df = pd.merge(melted_a2, melted_a3, on="Q1")

# Drop unnecessary columns
result_df.drop(columns=["A2", "A3"], inplace=True)

print(result_df)

我对输出的期望是

然而真正的输出是

python-3.x pandas merge
1个回答
0
投票

代码

tmp = df.set_index('Q1')
out= (tmp.set_axis(tmp.columns.str.split('_', expand=True), axis=1)
      .stack().droplevel(1).reset_index()
)

输出:

    Q1  A2  A3
0    1   1  10
1    1   1  51
2    1   2  32
3    1   2  62
4    2   2  25
5    2   1  51
6    2   2  23
7    2   2  52
8    3   2  62
9    3   1  16
10   3   1  71
11   3   2  52
12   4   1  18
13   4   1  17
14   4   1  31
15   4   1  11
© www.soinside.com 2019 - 2024. All rights reserved.