使用 spyder 从 2D 数据帧中提取并根据 2D 数据帧中的值位置将值添加到 1D 数据帧

Extracting from a 2D dataframe and adding value to 1D dataframe based on value locations in the 2D dataframe using spyder

我有两个数据框

df1 = pd.DataFrame({
    1: {'A': 237, 'B': 435, 'C': 900},
    2: {'A': 543, 'B': 313, 'C': 1200},
    3: {'A': 300, 'B': 150, 'C': 1600},
    4: {'A': 256, 'B': 635, 'C': 900},
    5: {'A': 343, 'B': 847, 'C': 1200},
    6: {'A': 122, 'B': 321, 'C': 1600}
})
df2 = pd.DataFrame({'well': ['A1', 'A2', 'A3', 'B1', 'B2', 'B3']})

我想创建一个新的数据框:

df3 = pd.DataFrame({
    'value': {'A1': 237, 'A2': 543, 'A3': 300, 'A4': 256,
              'A5': 343, 'A6': 122, 'B1': 435, 'B2': 313,
              'B3': 150, 'B4': 635, 'B5': 847, 'B6': 321},
    'Time': {'A1': 900, 'A2': 1200, 'A3': 1600, 'A4': 900,
             'A5': 1200, 'A6': 1600, 'B1': 900, 'B2': 1200,
             'B3': 1600, 'B4': 900, 'B5': 1200, 'B6': 1600}
})

我的实际数据帧比这个大,并且总是有不同的值,所以我想要一种方法来简化它,以便它可以在任何相同格式的数据帧上工作。

让我们试试T + melt to go to long-form, then compressing the index with Index.map:

df3 = (
    df1.T.melt(id_vars='C', ignore_index=False)  # Long Form saving C
        .set_index('variable', append=True)  # Add variable to the index
        .rename(columns={'C': 'Time'})  # Rename C column to time
        .reindex(columns=['value', 'Time'])  # re-order columns
)
df3.index = df3.index.swaplevel(0, 1).map(lambda s: ''.join(map(str, s)))

df3:

    value  Time
A1    237   900
A2    543  1200
A3    300  1600
A4    256   900
A5    343  1200
A6    122  1600
B1    435   900
B2    313  1200
B3    150  1600
B4    635   900
B5    847  1200
B6    321  1600