gpt4 book ai didi

python - 基于其他列创建 DataFrame 列(更快的解决方案)

转载 作者:行者123 更新时间:2023-12-02 01:34:03 25 4
gpt4 key购买 nike

我有一个 DataFrame,包含 100 万行和两列 TypeName,其值是具有非唯一值的列表。 TypeName 列具有相同数量的元素,因为它们形成一对(TypeName)。我想添加到我的 DataFrame 列,其名称是 Type 列中的唯一类型,其值是 Name 中相应值的列表列。以下是当前代码的简短示例。它可以工作,但当行数为 100 万时速度非常慢,因此我正在寻找更快的解决方案。

import pandas as pd
df = pd.DataFrame({"Type": [["1", "1", "2", "3"], ["2","3"]], "Name": [["A", "B", "C", "D"], ["E", "F"]]})

unique = list(set(df["Type"].explode()))
for t in unique:
df[t] = None
df[t] = df[t].astype('object')

for idx, row in df.iterrows():
for t in unique:
df.at[idx, t] = [row["Name"][i] for i in range(len(row["Name"])) if row["Type"][i] == t]

我想要的结果是: enter image description here

最佳答案

您可以分解整个数据帧,然后使用分解的数据帧并使用 list 作为 aggfunc 对其进行透视(重置索引以使用索引作为透视的石斑鱼)

df.explode(column=['Type','Name']).reset_index().pivot_table(index='index',columns='Type', values='Name',aggfunc=list)

Type 1 2 3
index
0 [A, B] [C] [D]
1 NaN [E] [F]

然后将其连接回原始内容

pd.concat([df,df.explode(column=['Type','Name']).reset_index().pivot_table(index='index',columns='Type', values='Name',aggfunc=list)],axis=1)

Type Name 1 2 3
0 [1, 1, 2, 3] [A, B, C, D] [A, B] [C] [D]
1 [2, 3] [E, F] NaN [E] [F]

根据要求,这里是出于调试目的逐步分解的代码

df1=df.explode(column=['Type','Name'])
df1=df1.reset_index()
pvt=df1.pivot_table(index='index',columns='Type', values='Name',aggfunc=list)
pd.concat([df,pvt],axis=1)

关于python - 基于其他列创建 DataFrame 列(更快的解决方案),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72819663/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com