gpt4 book ai didi

python - Pandas Dataframe 到嵌套数据结构

转载 作者:太空宇宙 更新时间:2023-11-04 04:08:34 26 4
gpt4 key购买 nike

我有一个具有这种结构的数据框:

>>> df
ID Class Type
0 1 Math Calculus
1 1 Math Algebra
2 1 Science Physics
3 1 History American
4 2 Math Factorization
5 2 History European
6 2 Science Chemistry
7 2 Science Biology
8 3 Math Computation
9 3 Science Biology

期望的输出是一个结构,它将 ID 映射到类,并将类映射到每个 ID 的类型。

例如:

{
1: {Math: [Calculus, Algebra], Science: [Physics], History: [American]}
2: {Math: [Factorization], History: [European], Science: [Chemistry, Biology]}
3: {Math: [Computation], Science: [Biology]}
}

我可以用 for 循环完成这个,但是数据集非常大(大约 3000 万行)所以我想用 Pandas 完成这个)

我能够像这样正确格式化单个 ID 的输出

>>> df.groupby(['ID', 'Class'])['Type'].apply(lambda x: x.to_dict())[1].groupby('Class').apply(lambda x: x.to_list()).to_dict()
{'History': ['American'], 'Math': ['Calculus', 'Algebra'], 'Science': ['Physics']}
>>> df.groupby(['ID', 'Class'])['Type'].apply(lambda x: x.to_dict())[2].groupby('Class').apply(lambda x: x.to_list()).to_dict()
{'History': ['European'], 'Math': ['Factorization'], 'Science': ['Chemistry', 'Biology']}

如何将上述逻辑应用于所有 ID,还有更简单的方法吗?我想我嵌套了太多的 groupbys 并且使问题过于复杂但不确定如何以更有效的方式做到这一点

最佳答案

IIUC 你可以尝试从这个开始玩:

import pandas as pd

txt="""0 1 Math Calculus
1 1 Math Algebra
2 1 Science Physics
3 1 History American
4 2 Math Factorization
5 2 History European
6 2 Science Chemistry
7 2 Science Biology
8 3 Math Computation
9 3 Science Biology"""

txt = [list(filter(lambda a: a != '', t.split(" ")))[1:]
for t in txt.split("\n")]

df = pd.DataFrame(txt, columns=["ID", 'Class', 'Type'])
df["ID"] = df["ID"].astype(int)


out = df.groupby("ID")\
.apply(lambda x: x.groupby("Class")\
.apply(lambda y:y["Type"].tolist()).to_dict())

返回

ID
1 {'History': ['American'], 'Math': ['Calculus',...
2 {'History': ['European'], 'Math': ['Factorization',...
3 {'Math': ['Computation'], 'Science': ['Biology']}
dtype: object

现在您可以通过(例如)out[1]["Math"] 访问您的数据,它返回 ['Calculus', 'Algebra']

关于python - Pandas Dataframe 到嵌套数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56798250/

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