【问题标题】:Pandas StartsWith multiple options熊猫开始有多种选择
【发布时间】:2017-07-18 06:26:25
【问题描述】:

我有一个如下的数据框:

 <A>   "B"    C    _:D   <E>
  A     B    "C"    <D>   E>
 <A>   "B"   "C"     D   <E>

我正在尝试找到一种方法来检查哪些元素以'

  1     1     0     1     1
  0     0     1     1     0
  1     1     1     0     1

由于数据框的大小,不使用 apply。 理想情况下,我的最终数据框如下:

 <A>   "B"    C    _:D   <E>    4
  A     B    "C"    <D>   E>    2
 <A>   "B"   "C"     D   <E>    4

谢谢

【问题讨论】:

    标签: regex string pandas dataframe


    【解决方案1】:

    更新:

    如何在原始数据框中添加一列包含 1 的总和 在stack + unstack中找到?

    In [59]: df['new'] = df.stack().str.contains(r'^(?:\"|<|_:)').astype(np.uint8).sum(level=0)
    
    In [60]: df
    Out[60]:
         0    1    2    3    4  new
    0  <A>  "B"    C  _:D  <E>    4
    1    A    B  "C"  <D>   E>    2
    2   A<   B"   C"    D   E<    0  # pay attention at this row
    

    旧答案:

    试试这个:

    df.apply(lambda col: col.str.contains(r'^\"|<|_:').astype(np.uint8))
    

    演示:

    In [33]: df.apply(lambda col: col.str.contains(r'^\"|<|_:').astype(np.uint8))
    Out[33]:
       0  1  2  3  4
    0  1  1  0  1  1
    1  0  0  1  1  0
    2  1  1  1  0  1
    

    或者使用stack() + unstack():

    In [36]: df.stack().str.contains(r'^\"|<|_:').astype(np.uint8).unstack()
    Out[36]:
       0  1  2  3  4
    0  1  1  0  1  1
    1  0  0  1  1  0
    2  1  1  1  0  1
    

    【讨论】:

    • Thx @MaxU 我更新了我的问题,提到我正在尝试不申请。
    • @Kelaref,我已经更新了我的答案......你的真实 DF 中有多少列?
    • @Kelaref 我认为你不会比 MaxU 的 stack() -&gt; unstack() 方法快得多。
    • @MaxU 完美运行!列数各不相同,但行数为数百万。您能否推荐如何在原始数据框中添加一列,其中包含在 stack + unstack 中找到的 1 的总和?
    • @Kelaref,哎呀,抱歉,现在已修复 - 查看更新的结果集
    猜你喜欢
    • 2017-05-16
    • 2021-12-21
    • 2021-05-22
    • 2018-09-27
    • 2015-01-20
    • 2021-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多