假设我有以下 DataFrame:
dfff = pd.DataFrame({"name":[["a","b","c","d"]], "value":[[["a","aa"],["b","bb"],["c","cc"],["d","dd"]]]})
name value
[a, b, c, d] [[a, aa], [b, bb], [c, cc], [d, dd]]
从此我想要类似的东西:
a b c d
[a, aa] [b, bb] [c, cc] [d, dd]
对于单行,这段代码可以工作,但如果有多行,则不行:
for i in range(len(dfff)):
for num, val in enumerate(dfff.name[i]):
dfff[val] = [dfff.value[i][num]]
dfff.drop(["name","value"], axis = 1, inplace = True)
我如何实现这是 Pandas ?非常感谢
编辑:多行表示例:
name value
0 [a, b, c, d] [[a, aa], [b, bb], [c, cc], [d, dd]]
1 [c, d, e] [[c, cc], [d, dd], [e, ee]]
它应该变成:
a b c d e
[a, aa] [b, bb] [c, cc] [d, dd] None
None None [c, cc] [d, dd] [e, ee]
最佳答案
我们可以在列表理解中zip
列name
和value
,然后迭代压缩的值以及每个名称-值pair
创建对应的record/dict
pd.DataFrame([dict(zip(*pair)) for pair in zip(df['name'], df['value'])])
a b c d e
0 [a, aa] [b, bb] [c, cc] [d, dd] NaN
1 NaN NaN [c, cc] [d, dd] [e, ee]
关于python - Pandas 根据其他列中的值创建新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67609535/