根据特定月份的值过滤熊猫数据框,并以另一列为条件

富塔多

我有一个带有以下头的大数据框

import pandas as pd
f = pd.Dataframe(columns=['month', 'Family_id', 'house_value'])

月份从0到239,Family_ids最高为10900,房屋价值有所不同。因此,数据框有超过两百五十万行。

我只想针对每个家庭的最终房价与其初始房价之间存在差异的数据过滤数据框。

一些样本数据如下所示:

f = pd.DataFrame({'month': [0, 0, 0, 0, 0, 1, 1, 239, 239], 'family_id': [0, 1, 2, 3, 4, 0, 1, 0, 1], 'house_value': [10, 10, 5, 7, 8, 10, 11, 10, 11]})

从该样本中得出的数据帧将是:

g = pd.DataFrame({'month': [0, 1, 239], 'family_id': [1, 1, 1], 'house_value': [10, 11, 11]})

因此,我想到了这样的代码:

ft = f[f.loc['month'==239, 'house_value'] > f.loc['month'==0, 'house_value']]

还尝试了这个:

g = f[f.house_value[f.month==239] > f.house_value[f.month==0] and f.family_id[f.month==239] == f.family_id[f.month==0]]

上面的代码给出了错误Keyerror: FalseValueError任何提示。谢谢。

智慧

用途groupby.filter

(f.sort_values('month')
  .groupby('family_id')
  .filter(lambda g: g.house_value.iat[-1] != g.house_value.iat[0]))

#  family_id    house_value   month
#1         1             10       0
#6         1             11       1
#8         1             11     239

正如@Bharath所评论的那样,您的方法会出错,因为对于布尔过滤器,它期望布尔序列的长度与原始数据帧的长度相同,在两种情况下都是不正确的,因为在比较之前应用了过滤过程。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

根据一列中的值(以另一列为条件)按顺序对数据进行排序

根据另一列的条件过滤数据框

根据另一列的值按分位数过滤熊猫数据框

根据条件在熊猫数据框中将一列的值提供给另一列

应用特定功能根据数据框中另一列的条件替换列的值

数据帧,以便一列为键,另一列为值

快速搜索熊猫数据框并根据条件在数据框的另一列中插入值

如何过滤数据框并根据熊猫数据框中的另一列获取记录总数?

熊猫根据选择为条件的另一列中的值创建一列

根据熊猫中数据框的另一列的值添加一列

R flextable垂直合并以另一列为条件

根据一个数据框的不同列创建一个新列,该条件以另一个数据框的另一列为条件

熊猫根据日期范围和另一列过滤数据框

根据另一列中的相同值组合熊猫数据框列中的文本值

根据与熊猫数据框的另一列值的部分匹配获取多列值

使用熊猫数据框根据过滤条件删除其中一列的方括号

如何根据另一列中满足的条件在熊猫数据框中添加新列?

遍历列熊猫数据框并根据条件创建另一列

根据熊猫数据框中另一列的最后一个值填充列

根据另一列过滤数据框的列

如何使用以另一列为条件的值填充一列?

过滤基于另一列的熊猫数据框

熊猫:根据另一列的值从列中提取值,并分成单独的数据框

为另一列中的唯一值的熊猫数据框值赋值

根据条件在数据框列中更改值,在另一列中更改值

根据另一列中的值将值添加到熊猫数据框的一列中

熊猫:groupby列结果以另一列为条件

根据条件在熊猫数据框中创建一列

根据条件填充另一列(熊猫)的空值