【问题标题】:Pandas between range lookup filtering范围查找过滤之间的熊猫
【发布时间】:2017-10-17 05:26:29
【问题描述】:

我的数据如下所示:

import pandas as pd

pd.DataFrame({
    'x_range':['101-200','101-200','201-300','201-300'], 
    'y':[5,6,5,6], 
    'z': ['Cat', 'Dog', 'Fish', 'Snake']
})

如何过滤x 值(适合x_range 内)和y 值以返回适当的z 值?例如,如果x = 248 和y= 5,我想返回Fish...

【问题讨论】:

  • 重要的是:我不想匹配 x = '101-200' 和 y = 5。我的 x 值将类似于 113 或 248。
  • 为什么不将这些值作为第三列添加到数据框中?

标签: python python-3.x pandas


【解决方案1】:

简单的过滤练习:

保存您的数据框:

df['x_range_start'] = [int(i.split('-')[0]) for i in df.x_range]

为范围开始和结束添加两列:

df['x_range_start'] = [int(i.split('-')[0]) for i in df.x_range]
df['x_range_end'] = [int(i.split('-')[1]) for i in df.x_range]

过滤以查找值:

x_value = 113
y_value = 5

df[(df.x_range_start <= x_value) &(x_value <= df.x_range_end)][df.y == y_value]['z']

【讨论】:

    【解决方案2】:

    我不喜欢这个,但我想出了一个解决方案:

    拆分:

    df['low'], df['high'] = df['x_range'].str.split('-', 1).str
    df['low'] = pd.to_numeric(df['low'])
    df['high'] = pd.to_numeric(df['high'])
    

    过滤器:

    x = 248
    y = 6
    row = df[(pd.Series.between(x, left=df.low, right=df.high, inclusive=True)) & 
    (df.y == y)]
    row['z']
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-10
      • 2016-05-05
      • 2022-12-01
      • 1970-01-01
      • 2014-07-06
      相关资源
      最近更新 更多