gpt4 book ai didi

python - Pandas - 转置数据框值中长度不等的列表

转载 作者:太空宇宙 更新时间:2023-11-03 11:40:36 24 4
gpt4 key购买 nike

这个问题是这个问题的延伸 Pandas: split list in column into multiple rows ,这次我不想合并更多的 DataFrame。而且我无法让它与超过 2 个 dfs 一起工作。

我有这个数据框:

  Index     Job positions   Job types   Locations
0 [5] [6] [3, 4, 5]
1 [1] [2, 6] [3, NaN]
2 [1,3] [9, 43] [1]

我想要每个数字的组合,所以最终结果是:

index   Job position  Job type  Location
0 5 6 3
0 5 6 4
0 5 6 5
1 1 2 3
1 1 2 NaN
1 1 6 3
1 1 6 NaN
2 1 9 1
2 1 43 1
2 3 9 1
2 3 43 1

所以我所做的是将列转换为系列:

positions = df['Job positions'].apply(pd.Series).reset_index().melt(id_vars='index').dropna()[['index', 'value']].set_index('index')
types = df['Job types'].apply(pd.Series).reset_index().melt(id_vars='index').dropna()[['index', 'value']].set_index('index')
locations = df['Locations'].apply(pd.Series).reset_index().melt(id_vars='index').dropna()[['index', 'value']].set_index('index')

dfs = [positions, types, locations]

然后尝试像这样合并它们:

df_final = reduce(lambda left,right: pd.merge(left,right,left_index=True, right_index=True, how="left"), dfs)

但它似乎跳过了带有 NaN 的字段 - 我该如何防止这种情况发生?

最佳答案

1 行:

import itertools

dfres = pd.DataFrame([(i[0],)+j for i in df.values for j in itertools.product(*i[1:])]
,columns=df.columns).set_index('index')


Job positions Job types Locations
index
0 5 6 3
0 5 6 4
0 5 6 5
1 1 2 3
1 1 2 NaN
1 1 6 3
1 1 6 NaN
2 1 9 1
2 1 43 1
2 3 9 1
2 3 43 1

关于python - Pandas - 转置数据框值中长度不等的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50306919/

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