【问题标题】:Splitting dataframes based on numerous cell strings基于大量单元字符串拆分数据帧
【发布时间】:2021-02-05 19:45:35
【问题描述】:

我最近发布了一个关于如何根据单元格字符串拆分数据框的问题:Splitting dataframes based on a cell string

我现在想使用相同的逻辑,但还要进一步拆分,以便第一行是橙色或绿色,最后一行是蓝色。请参阅下面的示例:

我有一个包含颜色列的数据框,其中包含字符串“红色”、“橙色”、“绿色”或“蓝色”。每次颜色列等于“蓝色”时是否可以拆分数据帧,第一行应该是“橙色”或“绿色”。请在下面找到示例数据框和所需的输出。 DF 是初始数据帧。 Res1、Res2、Res3 是我想要的。提前致谢。

df:

    Colour
 0    Red
 1    Orange
 2    Red
 3    Blue
 4    Green
 5    Blue
 6    Red
 7    Orange
 8    Orange
 9    Red
 10   Blue

res1:

     Colour
 0    Orange
 1    Red
 2    Blue

res2:

      Colour
 0    Green
 1    Blue

res3:

     Colour
 0    Orange
 1    Red
 2    Blue

注意:我更改了所需的输出。结果应该打印最新出现的橙色/绿色作为第一行,蓝色作为最后一行。所以在这种情况下,索引 7 不包括在内,因为橙色也在索引 8 中。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    快速修改链接问题中接受的答案:

    d = {k:d.loc[(d.Colour.isin(['Orange','Green'])).cumsum().idxmax():] 
         for k,d in df.groupby(df['Colour'].shift().eq('Blue').cumsum())}
    
    # print output
    for k,v in d.items():
        print('='*10, k)
        print(v)
    

    输出:

    ========== 0
       Colour
    1  Orange
    2     Red
    3    Blue
    ========== 1
      Colour
    4  Green
    5   Blue
    ========== 2
        Colour
    8   Orange
    9      Red
    10    Blue
    

    【讨论】:

    • 谢谢。抱歉,它实际上并没有完全解决我的问题。我已经编辑了上面的问题。我希望最新出现的橙色/绿色成为第一行。所以理想情况下,每个数据帧中都应该有一个橙色/绿色和蓝色实例。
    • @toothsie 更新了答案。
    猜你喜欢
    • 1970-01-01
    • 2021-04-16
    • 1970-01-01
    • 2019-06-09
    • 2014-07-04
    相关资源
    最近更新 更多