我有一个如下所示的数据帧:
df = pd.DataFrame({'regionname' : [10022, 10128, 10022, 10022, 10128],
'date' : ['1996-04-01', '2005-01-01', '2014-05-01', '2006-04-01', '2017-06-01', '2017-06-01'],
'median_price': [np.nan, 257700.0, 407100.0, 500000.0, 750000.0, 325000 ]})
-----------------------------------------
Output:
regionname date median_price
0 10022 1996-04-01 NaN
1 10128 2014-05-01 407100.0
2 10022 2006-04-01 500000.0
3 10022 2017-06-01 750000.0
4 10128 2017-06-01 325000.0
每个regionname
对应于数据集中的一个邮政编码。如果有帮助的话,数据最初是宽幅格式的,从1996-04年到2017-06年的每个日期都包含我分解成长格式的中间价格
我想用median_price
找到最短日期,然后从最长日期(2017-06-01)中减去它,以检查变化率。每个regionname
(邮政编码)都有最长日期的数据,但最短日期各不相同。我在这里看到一些帖子,建议做一个groupby,但没能让这个帖子起作用。在我的例子中,grp = df.groupby('regionname')
我的目标是在新列中或通过聚合计算更改。我尝试过类似的方法,但是dropna()
在groupby上不起作用,然后我可以减去最大值
min_test = df.groupby(['regionname','date'])['median_price'].dropna().min()
max_test = df.groupby(['regionname','date'])['median_price']
示例预期输出可以是这样的:
regionname change
0 10022 250000.0
1 10128 -82100.0
...
数据中有25个独特的邮政编码,日期范围为1996-04-01至2017-06-01,因此至少应涵盖基本输出选项
我不确定我是否可以使用np.nanmin
,或者最好的方法是什么。我觉得我缺少一个简单的方法
第一个想法是两列都使用^{} ,然后减去第一个和最后一个值,这是正确的,因为默认情况下会删除缺少的值:
或者您可以通过^{} 和^{} 使用索引值之差,但遗憾的是,缺少的值不会被忽略,因此必须首先通过^{} 创建,然后通过^{} 创建新的值列:
相关问题 更多 >
编程相关推荐