【问题标题】:How to get the 1st occurence of a value in a column in python dataframe如何在python数据框中的列中第一次出现值
【发布时间】:2018-12-07 21:20:24
【问题描述】:

我有一个 python pandas 数据框:

     name     date         value
0    XYZ    01-01-2018    No Value
1    XYZ    02-01-2018    No Value
2    XYZ    03-01-2018     A
3    XYZ    04-01-2018     A
4    XYZ    05-01-2018     B
5    XYZ    06-01-2018     B
6    XYZ    07-01-2018     A

我只想获取 value 列中的数据第一次出现 A 或 B 的行,并跳过连续重复的值。

例如在这种情况下,A第一次出现在索引2处,然后B出现在索引4处,A再次出现在索引6处。简而言之,我想获取索引为2,4和6的行。

任何帮助将不胜感激

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    看来你可能需要pd.Series.notnull + pd.Series.shift

    res = df[df['value'].notnull() & (df['value'] != df['value'].shift())]
    
    print(res)
    
      name        date value
    2  XYZ  03-01-2018     A
    4  XYZ  05-01-2018     B
    6  XYZ  07-01-2018     A
    

    【讨论】:

      【解决方案2】:

      isinshift

      df.loc[(df.value.isin(['A', 'B'])) & (df.value != df.value.shift())]
      
        name        date value
      2  XYZ  03-01-2018     A
      4  XYZ  05-01-2018     B
      6  XYZ  07-01-2018     A
      

      【讨论】:

        【解决方案3】:

        可能不是最好的解决方案,但这应该可行:

        import pandas as pd
        df = pd.DataFrame({"a": [1, 2, 3, 4, 5], "b": [0, 2, 0, 1, 2]})
        df.groupby("b").first()
        

        【讨论】:

        • 对于他的数据,这将返回NoValue的第一个出现,它也将只返回A的第一个值,而不是第6行。他希望在每个连续组中第一次出现
        猜你喜欢
        • 2018-01-26
        • 2023-01-23
        • 1970-01-01
        • 1970-01-01
        • 2020-03-03
        • 1970-01-01
        • 1970-01-01
        • 2017-12-20
        • 2022-09-17
        相关资源
        最近更新 更多