【问题标题】:How to find and extract parts of a string in a Pandas column and encode it into new columns如何在 Pandas 列中查找和提取部分字符串并将其编码到新列中
【发布时间】:2022-10-07 18:33:53
【问题描述】:

我有一个带有如下列的 Pandas 数据框:

language
Spanish - C1
No
Spanish - B2
Spanish - C1 / German - C1 / Portuguese - C1
No
German C2
No
Spanish - B2 / Portuguese - C1

每个 id 可以没有语言 (\'No\'),它可以有一种语言,后跟它的级别(例如,\'Spanish - B2\'),或者它可以有几种语言,它们的级别用 \"/\ 分隔" 符号(例如 \"Italian-B1 / 葡萄牙语-C2\")。

这个想法是使用来自“语言”列的信息在新列中进行编码。例如,像这样:

id no_lang Spanish - B2 Spanish - C1 German - C1 German - C2 Portuguese - C1
01 0 0 1 0 0 0
02 1 0 0 0 0 0
03 0 1 0 0 0 0
04 0 0 1 1 0 1
05 1 0 0 0 0 0
06 0 0 0 0 1 0
07 1 0 0 0 0 0
08 0 1 0 0 0 1

如果有多种语言,它们总是按字母顺序出现。

我想这很复杂,我不知道从哪里开始。

提前致谢!任何帮助表示赞赏!

    标签: python pandas dataframe


    【解决方案1】:

    一个可能的解决方案,基于pandas.crosstab

    df['language'] = df['language'].str.split(' / ')
    df = df.explode('language')
    pd.crosstab(index=df['Id'], columns=df['language'])
    

    输出:

    language  German - C1  German C2  No  Portuguese - C1  Spanish - B2  \
    Id                                                                    
    1                   0          0   0                0             0   
    2                   0          0   1                0             0   
    3                   0          0   0                0             1   
    4                   1          0   0                1             0   
    5                   0          0   1                0             0   
    6                   0          1   0                0             0   
    7                   0          0   1                0             0   
    8                   0          0   0                1             1   
    
    language  Spanish - C1  
    Id                      
    1                    1  
    2                    0  
    3                    0  
    4                    1  
    5                    0  
    6                    0  
    7                    0  
    8                    0  
    

    【讨论】:

      猜你喜欢
      • 2016-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-07
      • 2020-11-08
      • 1970-01-01
      • 1970-01-01
      • 2021-03-15
      相关资源
      最近更新 更多