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

Posted

技术标签:

【中文标题】使用 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 【发布时间】:2021-09-20 03:56:54 【问题描述】:

我有两个数据框

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
)

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

【问题讨论】:

如果你能理解和定义逻辑,99% 的时间你都可以自己做 【参考方案1】:

让我们尝试T + melt 去长格式,然后用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

【讨论】:

以上是关于使用 spyder 从 2D 数据帧中提取并根据 2D 数据帧中的值位置向 1D 数据帧添加值的主要内容,如果未能解决你的问题,请参考以下文章