【问题标题】:Pandas Select Rows Start to End with Specific Starting Value in Column熊猫选择行以列中的特定起始值开始到结束
【发布时间】:2021-11-06 01:31:11
【问题描述】:

这很简单,但我还没有找到答案。我有一个如下所示的数据框“df1”:

    year      5
0   1948 -99.99
1   1949 -99.99
2   1950  -1.74
3   1951   0.17
4   1952  -0.93

而且,我只需选择以“年份”列 == 1950 开头的行,然后选择行尾(在本例中为“1952”)。

我在下面尝试过,但我只得到“假”、“真”,但当 'yearstart' = 1950 时我只得到“真”。所以,如果 'yearstart' == 1950,我得到以下结果。我不确定如何执行 yearstart 并将所有数据提取到行尾。

yearstart = 1950

df2 = [df1.year==yearstart]

我明白了-

[0     False
 1     False
 2      True
 3     False
 4     False

我需要的是这个:

df2 = 

    year      5
0   1950  -1.74
1   1951   0.17
2   1952  -0.93

【问题讨论】:

    标签: pandas slice rows drop


    【解决方案1】:

    试试idxmaxiloc

    >>> df.iloc[df['year'].eq(1950).idxmax():]
       year     5
    2  1950 -1.74
    3  1951  0.17
    4  1952 -0.93
    >>> 
    

    【讨论】:

      【解决方案2】:

      如果年份已排序,或者如果您希望所有年份大于或等于 1950,则可以使用query

      df.query('year >= 1950')
      

      输出:

         year     5
      2  1950 -1.74
      3  1951  0.17
      4  1952 -0.93
      

      【讨论】:

      • 由于某种原因,我收到此错误 - TypeError: '>=' not supported between 'str' and 'int'
      • 年份字符串中的值是 int 吗?如果是字符串,使用df.query('year >= "1950"'),或者更好,首先转换为int
      • 好的,我如何将整列转换为“int”?是的,它们是字符串。
      • df['year'] = df['year'].astype(int)
      • 但我很困惑,如果值是字符串,那么接受的答案对你有什么作用?
      【解决方案3】:

      df2 = df1[df1['year'] >= 1950]

      【讨论】:

      • 请添加更多详细信息以扩展您的答案,例如工作代码或文档引用。
      猜你喜欢
      • 1970-01-01
      • 2017-07-18
      • 2014-07-27
      • 2020-12-14
      • 2016-12-15
      • 2019-01-05
      • 1970-01-01
      • 1970-01-01
      • 2022-11-24
      相关资源
      最近更新 更多