首页 > 解决方案 > 熊猫在一列中有多个遮阳篷,如何拆分?

问题描述

我有一个看起来像...的数据框

在此处输入图像描述

或者

    ConvertedComp LanguageWorkedWith
0   NaN           C#;HTML/CSS;JavaScript
1   NaN           JavaScript;Swift
2   NaN           Objective-C;Python;Swift
3   NaN           NaN
4   NaN           HTML/CSS;Ruby;SQL

我怎样才能将这些语言分开,以便每种语言都在自己的列中?并用介于两者之间的 nan 值正确分组。

所以预期的输出看起来像。

    ConvertedComp   C#   HTML/CSS   python   swift   Ruby   SQL   JavaScript   Objective-C
0   NaN             C#   HTML/CSS   NaN      NaN     NaN    Nan   JavaScript   NaN
1   NaN             NaN  NaN        NaN      Swift   NaN    NaN   JavaScript   NaN
2   NaN             NaN  NaN        Python   Swift   NaN    NaN   NaN          Objective-C
3   NaN             NaN  NaN        NaN      NaN     NaN    NaN   NaN          NaN
4   NaN             NaN  HTML/CSS   NaN      NaN     Ruby   SQL   NaN          NaN

标签: python-3.xpandasdataframe

解决方案


用于Series.str.get_dummies指示符,强制转换为布尔值,并numpy.where用列名替换值和NaN,传递给原始值DataFrame并添加到原始值:

mask = df.pop('LanguageWorkedWith').str.get_dummies(';').astype(bool)
df = df.join(pd.DataFrame(np.where(mask, mask.columns, np.nan), 
                          columns=mask.columns, 
                          index=df.index))
print (df)
   ConvertedComp   C#  HTML/CSS  JavaScript  Objective-C  Python  Ruby  SQL  \
0            NaN   C#  HTML/CSS  JavaScript          NaN     NaN   NaN  NaN   
1            NaN  NaN       NaN  JavaScript          NaN     NaN   NaN  NaN   
2            NaN  NaN       NaN         NaN  Objective-C  Python   NaN  NaN   
3            NaN  NaN       NaN         NaN          NaN     NaN   NaN  NaN   
4            NaN  NaN  HTML/CSS         NaN          NaN     NaN  Ruby  SQL   

   Swift  
0    NaN  
1  Swift  
2  Swift  
3    NaN  
4    NaN  

推荐阅读