下面的代码以月份为单位将数据分隔开来,并且month\u发生了变化。值和Val_日期是相关的,Val_日期应该是值索引的匹配日期
因此,多维数组中的每一行都应该表示一个月,因此第一行[100123135.3139.05156.08163.88173.72]用于2015年11月,第六行[163173.12]用于2016年2月等
它输出每个月的最后一个索引,因此第一行的输出将是123。函数的输出直到到达agg.是数组([list([100.0,123.0,135.3,139.05,156.08]),list([0]),list([0]),list([163.88,173.72]),0],dtype=object)
如何将代码添加到现有代码中,以便它输出每个数组的max-min和last index。产生以下预期输出
将numpy作为np导入
作为pd进口熊猫
Values=np.array(
[
[100, 123, 135.3, 139.05, 156.08, 163.88, 173.72],
[100, 123, 135.3, 139.05, 156.08, 163.88, 173.72],
[100, 123, 135.3, 139.05, 156.08, 163.88, 173.72],
[100, 123, 135.3, 139.05, 156.08, 163.88, 173.72],
[100, 123, 135.3, 139.05, 156.08, 163.88, 173.72],
[100, 123, 135.3, 139.05, 156.08, 163.88, 173.72],
[100, 123, 135.3, 139.05, 156.08, 163.88, 173.72],
]
)
Values=np.array([arr[i:]表示i,枚举中的arr(Values.tolist())]))
Val_日期=[
&“2015-11-01 01:03:00”;,
&“2015-11-08 12:56:00”;,
&“2015-11-11 02:30:00”;,
&“2015-11-1404:23:00”;,
&“2015-11-1405:23:00”;,
&“2016-02-11 02:00:00”;,
&“2016-02-15 15:00:00”;,
]
df=pd.DataFrame({quot;dt";:Val_dates,";Val";:Values}).aType({quot;dt";:";datetime64";})
idx=pd.日期范围(“2015-11-01 00:00:00”和“2016-03-01 00:00:00”,频率=“MS”)
展示(
df.groupby(pd.Grouper(freq=";MS";,key=";dt";)[";val";]
.应用(lambda x:x.head(1).挤压()[:len(x)],如果len(x)不是[0])
.reindex(idx,填充值=0)
.to_numpy()
阿格先生(
#获取每个组的“持续时间”列的最大值
最大持续时间=(λx:np.max(x)),
#获取每个组的持续时间列的最小值
最小持续时间=(λx:np.min(x)),
#最后索引
最后的指数=(λx:x[len(x)-1]),
)
)
预期产出:
因此,考虑到代码的最后一个功能部分输出的内容:
将numpy作为np导入
作为pd进口熊猫
...
arr=(
df.groupby(pd.Grouper(freq=";MS";,key=";dt";)[";val";]
.应用(lambda x:x.head(1).挤压()[:len(x)],如果len(x)不是[0])
.reindex(idx,填充值=0)
.to_numpy()
)
打印(arr)
#输出列表列表和一个整数
[[100.0, 123.0, 135.3, 139.05, 156.08], [0], [0], [163.88, 173.72], 0]
你可以试试这个:
new_df=pd.DataFrame({dates";:idx})
对于i,枚举(列表(arr))中的项:
如果不存在(项目,列表):
项目=[项目]
新位置[i,“最小值”]=最小值(项目)
新位置[i,“最大值”]=最大值(项目)
新的位置[i,“lastindex”]=项目[len(项目)-1]
然后:
打印(新)
#输出
日期最短最长索引
0 2015-11-01 100.00 156.08 156.08
1 2015-12-01 0.00 0.00 0.00
2 2016-01-01 0.00 0.00 0.00
3 2016-02-01 163.88 173.72 173.72
4 2016-03-01 0.00 0.00 0.00