将字典列转换为单个

将字典列转换为单个

我有一个与此类似的数据框:

                     data
0                    [{'v': 10, 'n': 'metric2'}]
27   [{'v': 20, 'n': 'metric1'}, {'v': 56, 'n': 'metric3'}]
51                   [{'v': 20, 'n': 'metric3'}]
89                   [{'v': 10, 'n': 'metric2'}]

我想把它变成这样的:
    metric1 metric2 metric3
0   NaN     10     NaN
27  20      NaN    56
51  NaN     NaN    20
89  NaN     10     NaN

我想知道这是否可能?

最佳答案

这是一个基于 pivot 的解决方案,具有一定程度的扁平化。

from itertools import chain

df2 = pd.DataFrame(chain.from_iterable(df['data']))
df2.insert(0, 'idx', df.index.repeat(df['data'].str.len()))

df2.pivot(*df2)

n    metric1  metric2  metric3
idx
0        NaN     10.0      NaN
27      20.0      NaN     56.0
51       NaN      NaN     20.0
89       NaN     10.0      NaN

在一行中,可以指定此操作,
(pd.DataFrame(chain.from_iterable(df['data']))
   .assign(idx=df.index.repeat(df['data'].str.len()))
   .pivot('idx', 'n', 'v'))

n    metric1  metric2  metric3
idx
0        NaN     10.0      NaN
27      20.0      NaN     56.0
51       NaN      NaN     20.0
89       NaN     10.0      NaN

关于python - 将字典列转换为单个 Pandas DataFrame,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56566200/

10-12 20:10