【问题标题】:Get rows between two values of a column using Python使用Python获取列的两个值之间的行
【发布时间】:2018-06-07 11:38:53
【问题描述】:

假设有如下数据框:

df = {
'Period': [1996,'Jan','Feb','March',1997,'Jan','Feb','March',1998,'Jan','Feb','March']
'Some-Values': [,'a','b','c',,'d','e','f',,'g',h','i']
}

需要提取值19961997之间的行,使得生成的数据帧如下:

df_res = {
    'Period': ['Jan','Feb','March']
    'Some-Values': ['a','b','c']
}

我目前正在为此尝试 Pandas,但无法找到解决方案。

【问题讨论】:

  • 任何人都可以在 R 中执行此操作吗?

标签: python python-3.x pandas dataframe


【解决方案1】:

尝试将您的数据框更改为“正确”的方式,然后我们可以使用年份信息获取信息

df['Year']=df.loc[df['Some-Values']=='','Period']
df.Year=df.Year.ffill()
df=df.loc[df.Period!=df.Year,:]
df.loc[df.Year==1996,:]
Out[651]: 
  Period Some-Values  Year
1    Jan           a  1996
2    Feb           b  1996
3  March           c  1996

【讨论】:

    【解决方案2】:

    通过pd.Series.idxmaxpd.DataFrame.iloc 的一种方式:

    df = pd.DataFrame({'Period': [1996,'Jan','Feb','March',1997,'Jan','Feb',
                                  'March',1998,'Jan','Feb','March'],
                       'Some-Values': ['','a','b','c','','d','e','f','','g','h','i']})
    
    res = df.iloc[(df['Period'] == 1996).idxmax()+1:(df['Period'] == 1997).idxmax()]
    
    print(res)
    
      Period Some-Values
    1    Jan           a
    2    Feb           b
    3  March           c
    

    为了可读性,您可以使用slice 对象:

    slicer = slice((df['Period'] == 1996).idxmax()+1,
                   (df['Period'] == 1997).idxmax())
    
    res = df.iloc[slicer]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多