【问题标题】:Combine rows of a column based on index range in pandas根据熊猫中的索引范围组合列的行
【发布时间】:2020-03-20 18:25:35
【问题描述】:

我有一个包含一列的数据框。

Index | column1 |
0         and
1         too
2         ask
3         the
4         but
5         hat
6         hot
7         top
8         tap

我想根据条件组合索引之间的行。例如,如果一行有字母“a”,则索引将是:

0, 2, 5, 8

因此,合并行:

(0, 1), (2, 3, 4), (5, 6, 7), (8)

最后的输出是:

Index | column1 |
0         and, too
1         ask, the, but
2         hat, hot, top
3         tap

我试过的是:

[i for i in range(len(df['column1'])) if 'a' in df['column1'][i]]

给我索引:

[0, 2, 5, 8]

但从这里卡住了。谢谢

【问题讨论】:

    标签: python pandas list list-comprehension


    【解决方案1】:

    aSeries.str.contains 进行比较并通过Series.cumsum 创建组,然后通过过滤g[g > 0] 删除可能包含非a 值的组,最后使用join 进行聚合:

    g = df['column1'].str.contains('a').cumsum()
    
    df = df.groupby(g[g > 0])['column1'].apply(', '.join).reset_index(drop=True).to_frame()
    print (df)
             column1
    0       and, too
    1  ask, the, but
    2  hat, hot, top
    3            tap
    

    第一个值不包含a

    print (df)
      column1
    1     too
    2     ask
    3     the
    4     but
    5     hat
    6     hot
    7     top
    8     tap
    
    g = df['column1'].str.contains('a').cumsum()
    
    df = df.groupby(g[g > 0])['column1'].apply(', '.join).reset_index(drop=True).to_frame()
    print (df)
             column1
    0  ask, the, but
    1  hat, hot, top
    2            tap
    

    【讨论】:

      【解决方案2】:
      stuff=["and","too","ask","the","but","hat","hot","top","tap"]
      
      newlist=[]
      collection=[]
      for i in stuff:
          if "a" in i:
              if len(collection) >0:
                  newlist.append(collection)
              collection=[]
          collection.append(i)
      newlist.append(collection)
      

      尝试这样的事情

      【讨论】:

        猜你喜欢
        • 2014-08-12
        • 1970-01-01
        • 2022-07-12
        • 1970-01-01
        • 2022-11-23
        • 1970-01-01
        • 1970-01-01
        • 2018-05-12
        • 1970-01-01
        相关资源
        最近更新 更多