从我之前的问题开始:使用Pandas从数组中获取分组信息
我有一个像这样的数据集,我想通过大 pandas 获取此信息:对于每一天(按日分组),第二个值是“打开”,第二个值是“关闭”,最高值是“高” ”和“低”的下限值以及“体积”之和。
"Date","Time","Open","High","Low","Close","Up","Down","Volume"
01/03/2000,00:05,1481.50,1481.50,1481.00,1481.00,2,0,0.00
01/03/2000,00:10,1480.75,1480.75,1480.75,1480.75,1,0,1.00
01/03/2000,00:20,1480.50,1480.50,1480.50,1480.50,1,0,1.00
[...]
03/01/2018,11:05,2717.25,2718.00,2708.50,2709.25,9935,15371,25306.00
03/01/2018,11:10,2709.25,2711.75,2706.50,2709.50,8388,8234,16622.00
03/01/2018,11:15,2709.25,2711.50,2708.25,2709.50,4738,4703,9441.00
03/01/2018,11:20,2709.25,2709.50,2706.00,2707.25,3609,4685,8294.00
在我之前的问题中,用户建议我使用此方法:
df.groupby('Date').agg({
'Close': 'last',
'Open': 'first',
'High': 'max',
'Low': 'min',
'Volume': 'sum'
})
但是现在我想将第二个元素用于“打开”,将倒数第二个用于“关闭”。我怎样才能做到这一点?
您可以创建自定义函数,只有在第二个val不存在(例如NaN
,第一个值)的情况下,才需要指定输出x.iat[0]
:
def second(x):
return x.iat[1] if len(x) > 1 else np.nan
def secondLast(x):
return x.iat[-2] if len(x) > 1 else np.nan
df1 = df.groupby('Date').agg({
'Close': secondLast,
'Open': second,
'High': 'max',
'Low': 'min',
'Volume': 'sum'
})
print (df1)
Close Open High Low Volume
Date
01/03/2000 1480.75 1480.75 1481.5 1480.5 2.0
03/01/2018 2709.50 2709.25 2718.0 2706.0 59663.0
seconLast()x.iat必须为[-2]才能倒数第二个?
@Steve-糟糕,您是对的
是否可以将关闭数组而不是打开数组传递给第二个函数?
@Steve-您能具体一点吗?
'Open': second,
在这一行,x
second(x)函数的参数是Open值的列表。我想知道是否可以做类似的事情second(x=close)