【问题标题】:How to split dataframe text column to boolean columns如何将数据框文本列拆分为布尔列
【发布时间】:2020-10-07 10:53:56
【问题描述】:

我有一个数据框,其中包含大约 300 家小型企业的信息。 'Business_Model' 列如下所示:

0    B2B business to business (companies sell to co...
1    B2B business to business (companies sell to co...
2    B2B2C business to business to consumer (compan...
3    B2B business to business (companies sell to co...
4    B2C business to consumer (the final client is ...
Name: Modelo_de_Negocio, dtype: object

此列有几十个独特的值,因为每个单元格的内容可以是不同商业模式的组合(例如,一家公司可以经营 B2B 和 B2C,而另一个可以是 B2B、B2C 和 B2B2C)。

我想把这个列的数据拆分成布尔列,每个业务模型一个,这样就可以得到类似

display (df[[B2B, B2C, C2C, B2G, B2B2C]])

    B2B     B2C     C2C     B2G     B2B2C
0   True    False   False   False   False
1   False   True    True    True    True
2   False   False   True    False   True
3   True    False   False   False   False
4   False   True    False   False   True

我该怎么做?如果可以删除'Business_Model' 值中的过多文本并仅保留首字母(例如B2B, B2C),然后我可以将其拆分为新的布尔列,但我不知道如何编辑此列中的字符串值以聪明的方式。

【问题讨论】:

  • B 开头的值是否总是在Modelo_de_Negocio 列中的每个字符串的前面?

标签: pandas dataframe split


【解决方案1】:

如果值从列开始使用:

df = pd.get_dummies(df['Modelo_de_Negocio'].str.split().str[0], dtype=bool)
print (df)
     B2B  B2B2C    B2C
0   True  False  False
1   True  False  False
2  False   True  False
3   True  False  False
4  False  False   True

如果值并不总是在每个字符串的开头,请使用Series.str.findall 获取以B 开头的所有字符串以及下一个数字或大写值,然后使用Series.str.joinSeries.str.get_dummies,最后将值转换为布尔值:

df = (df1['Modelo_de_Negocio'].str.findall('(B[A-Z0-9]+)')
                              .str.join('|')
                              .str.get_dummies()
                              .astype(bool))
print (df)
     B2B  B2B2C    B2C
0   True  False  False
1   True  False  False
2  False   True  False
3   True  False  False
4  False  False   True

【讨论】:

  • 谢谢,第二行代码真的拯救了我的一天
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
  • 2013-08-04
  • 2018-09-23
  • 2012-12-08
  • 2021-05-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多