我有一个带有以下头的大数据框
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: False
和ValueError
任何提示。谢谢。
用途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] 删除。
我来说两句