Pandas 列的值作为列标题

Pandas value of a column as column headings

我有一个 pandas 数据框,如下所示

我想按如下方式构建DataFrame。我想将 id 列的值与列 headers 合并并创建一个新的数据框,如下所示。行数和原来一样table。对于每个 id,新列应创建为 id_d1 和 id_d2。然后应根据 id 和列值更新值。如果 id 值发生变化并且其他原始值应与之前的原始值相同,则应更改值。

这只是数据框的一个例子。在原始数据框中,我在 id 列中有 106 个唯一值和 8 个列值(d1、d2、...d8)。因此,手动创建列标题也不切实际(将有 106*8 = 848 列)。我正在尝试找到一种有效的方法来做到这一点,因为我有一个大型数据集(超过 100000 行)

非常感谢您提出有关最佳方法的任何建议

应该这样做:

import pandas as pd
import numpy as np

df = pd.DataFrame(data={"id": ['162', '19C', '0D0', '033', '0D0',
                               '033', '162', '19C', '0D0', '033'],
                        "d1": [0, 22, 90, 0, 98,
                               0, 0, 26, 106, 0],
                        "d2": [8, 12, 120, 7, 120,
                               7, 8, 8, 120, 7]})

# loop through unique "id" values
for x in df["id"].unique():
    # loop through select columns
    for p in list(df.columns[1:3]):
        # create new column, only use matched id value data, and forward fill the rest
        df[x + "_" + p] = df[p].where(df["id"] == x, np.nan).ffill()

由于您的实际数据框中最多有 d8,因此您需要更改嵌套的 for 循环以适应。只创建一个列表可能更容易,即 cols = ["d1", "d2", ...] 并使用它。