分裂一个数据框列有一只熊猫列入多列

0

的问题

我有一个大熊猫据框有许多列。 其中之一是一系列。 我想要分裂,列入一组的布尔列。 因此,如果在行['Red','热点','夏'],我想3列:红色的(具有价值1)、热(具有价值1)和夏季(具有值1)。

例如:

df = pd.DataFrame({'Owner': ['Bob', 'Jane', 'Amy'],
               'Make': ['Ford', 'Ford', 'Jeep'],
               'Model': ['Bronco', 'Bronco', 'Wrangler'],
               'Sentiment': [['Meh','Red','Dirty'], ['Rusty','Sturdy'], ['Dirty','Red']],
               'Max Speed': [80, 150, 69],
              'Customer Rating': [90, 50, 91]})

让我们:

enter image description here

现在,我想这输出: enter image description here (True/False可以一和零,也是。 正如良好)。

注:我看着这个职位如下: 分裂一个大熊猫列的列入多列 但是,只有直接工作,如果你系不是已经部分DF。

任何帮助,感谢!

dataframe pandas python
2021-11-24 02:59:52
2

最好的答案

2

尝试 explode 然后 crosstabjoin

s = df.Sentiment.explode()
out = df.join(pd.crosstab(s.index,s).astype(bool))
out
  Owner  Make     Model          Sentiment  ...    Meh    Red  Rusty  Sturdy
0   Bob  Ford    Bronco  [Meh, Red, Dirty]  ...   True   True  False   False
1  Jane  Ford    Bronco    [Rusty, Sturdy]  ...  False  False   True    True
2   Amy  Jeep  Wrangler       [Dirty, Red]  ...  False   True  False   False
[3 rows x 11 columns]
2021-11-24 14:07:56
0

试试这个:

df = pd.concat([df, pd.get_dummies(df['Sentiment'].explode())], axis=1)

输出:

>>> df
  Owner  Make     Model             Sentiment  Max Speed  Customer Rating  AWESOME  Dirty  LOVE  Meh  Red  Rusty  Sturdy
0   Bob  Ford    Bronco     [Meh, Red, Dirty]         80               90        0      0     0    1    0      0       0
0   Bob  Ford    Bronco     [Meh, Red, Dirty]         80               90        0      0     0    0    1      0       0
0   Bob  Ford    Bronco     [Meh, Red, Dirty]         80               90        0      1     0    0    0      0       0
1  Jane  Ford    Bronco       [Rusty, Sturdy]        150               50        0      0     0    0    0      1       0
1  Jane  Ford    Bronco       [Rusty, Sturdy]        150               50        0      0     0    0    0      0       1
2   Amy  Jeep  Wrangler  [LOVE, AWESOME, Red]         69               91        0      0     1    0    0      0       0
2   Amy  Jeep  Wrangler  [LOVE, AWESOME, Red]         69               91        1      0     0    0    0      0       0
2   Amy  Jeep  Wrangler  [LOVE, AWESOME, Red]         69               91        0      0     0    0    1      0       0

它是如何工作的

你在寻找什么被通常称为 一个热编码,并有一个方法在熊猫只是为: get_dummies(). 它需要一个系列(或据框),并创建一个新的列为每一个独特的价值,这系列(或据框).

df['Sentiment'].explode() 创建一个新的栏,含有所有的个人价值观的所有的名单中选column(s)。

2021-11-24 03:25:47

其他语言

此页面有其他语言版本

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................