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", ...]
并使用它。
我有一个 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", ...]
并使用它。