我想得到按ISIN和variable分组的两个值(最新减去最旧)之间的差异。例如,对于变量a
和b
,我应该得到-1,对于变量c
,我应该得到11。
check = pd.DataFrame({
'date':[1,2,1,2,1,2],
'ISIN':[1,1,2,2,3,3],
'variable':['a','a','b','b','c','c'],
'value':[8,9,8,9,21,10]
})
result = check.groupby(['ISIN', 'variable'])['value'].apply(lambda x: check.loc[x.idxmax(), 'value'] - check.loc[x.idxmin(), 'value']).reset_index()
这是我得到的最好的结果,但它只显示正值,因为这就是idxmax()
/idxmin()
的工作方式。有没有一种方法可以将最近日期减去最近日期,然后对这些值进行分组减去?
发布于 2021-01-08 11:39:39
我认为下面的代码应该可以解决这个问题:
import pandas as pd
check = pd.DataFrame({
'date': [1,2,1,2,1,2],
'ISIN': [1,1,2,2,3,3],
'variable': ['a','a','b','b','c','c'],
'value': [8,9,8,9,21,10]
})
result = check.groupby(['ISIN', 'variable'])['date'].apply(
lambda x: check.loc[x.idxmin(), 'value'] - check.loc[x.idxmax(), 'value']
).reset_index()
result.columns = ['ISIN', 'variable', 'value']
print(result)
它给出了输出:
ISIN variable value
0 1 a -1
1 2 b -1
2 3 c 11
此版本在date
上应用idxmin
和idxmax
,而不是在value
上。
您的原值将其应用于value
,因此在这种情况下,该值将始终为正(因为它将始终从最大值中减去最小值)。
我还切换了idxmin
和idxmax
以实现预期的输出-您似乎以相反的方式获得了它,这将否定结果。
https://stackoverflow.com/questions/65626845
复制相似问题