使用 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 数据帧添加值的主要内容,如果未能解决你的问题,请参考以下文章

R使用XML2将数据从XML提取到数据帧中

Python Pandas基于最小索引从数据帧中提取值

如果它们之间的欧几里得是最低的,则将一个数据帧中的 2D 点替换为另一个数据帧中的 2D 点

如何使用 Tesseract OCR 从视频帧中提取数字?

Spotify API:如何将不同级别的 JSON 信息提取到一个数据帧中

迭代火花数据帧中的每一行并检查每一行是不是包含某个值