首页 > 解决方案 > Python Pandas - 将每个键和值映射到唯一列

问题描述

我正在做一些数据争论,我遇到了以下问题。

在我的 CSV 文件(我通过 pandas 阅读)中,我有一个名为 effects 的列。效果如下所示:

       effects
Row 1: Euphoric 52% Creative 42% Happy 40% ...
Row 2: Relaxed 95% Happy 90% Euphoric 60% ...
Row 3: Happy 64% Uplifted 48% Relaxed 48% ...

等等等等。现在有另一个名为 name 的列,如下所示:

       name
Row 1: Tommy
Row 2: Susan
Row 3: Bruce

我想要做的是将效果列中的每个键/值映射到与其适当名称相对应的唯一列。

所以基本上它看起来像这样:

       name  euphoric  creative   happy
Row 1: Tommy  52%       42%        40%
Row 2: Susan  60%       n/a        90%
Row 3: Bruce  n/a       n/a        64%

因此,您可以看到具有相应百分比的每个效果成为每个名称的唯一列(如果数据不存在,则为 n/a 或 null)。

我假设答案可能包括将效果对象转换为字典列表,也许还有一些 excel 文本到顶部的列操作,以使映射更容易,但我无法成功地做到这一点。

这里的任何帮助将不胜感激。

标签: pythonpandasdata-analysisdata-wrangling

解决方案


你可以str.extract这样使用:

df[['name']].join(df.effects.str.extractall('(\w+) (\d+\%)')
                    .reset_index()
                    .pivot(index='level_0', columns=0, values=1)
                 )

输出:

         name Creative Euphoric Happy Relaxed Uplifted
Row 1:  Tommy      42%      52%   40%     NaN      NaN
Row 2:  Susan      NaN      60%   90%     95%      NaN
Row 3:  Bruce      NaN      NaN   64%     48%      48%

推荐阅读