【发布时间】:2020-08-27 18:07:22
【问题描述】:
听起来与上一个相似,但问题不同:
我可以通过执行以下操作从 df 创建“增量增长”样本:
# df = { take an average float dataframe of 0.5-1mio rows & 20-50 cols ...}
arr = np.asarray(df)
res = list((map(lambda i: arr[:i], range(1,df.shape[0]+1))))
print(res)
>>>[
[
["2019-06-17 08:45:00", 12089.89, 12089.89, 12087.71, 12087.71 ]
],
[
["2019-06-17 08:45:00", 12089.89, 12089.89, 12087.71, 12087.71 ],
["2019-06-17 08:46:00", 12087.91, np.nan, 12087.71, 12087.91 ]
],
[
["2019-06-17 08:45:00", 12089.89, 12089.89, 12087.71, 12087.71 ],
["2019-06-17 08:46:00" , 12087.91 , np.nan, 12087.71, 12087.91 ],
["2019-06-17 08:47:00" , 12088.21 , 12088.21, 12084.21 , 12085.21 ]
],
[
["2019-06-17 08:45:00", 12089.89, 12089.89 , 12087.71 , 12087.71 ],
["2019-06-17 08:46:00" , 12087.91 , np.nan, 12087.71, 12087.91 ],
["2019-06-17 08:47:00" , 12088.21 , 12088.21 , 12084.21 , 12085.21 ],
["2019-06-17 08:48:00" , 12085.09 , 12090.21 , 12084.91 , 12089.41 ]
],
[
["2019-06-17 08:45:00", 12089.89, 12089.89 , 12087.71 , 12087.71 ],
["2019-06-17 08:46:00" , 12087.91 , np.nan, 12087.71, 12087.91 ],
["2019-06-17 08:47:00" , 12088.21 , 12088.21 , 12084.21 , 12085.21 ],
["2019-06-17 08:48:00" , 12085.09 , 12090.21 , 12084.91 , 12089.41 ],
["2019-06-17 08:49:00" , 12089.71 , 12090.21 , 12087.21 , 12088.21 ]
]
]
但它们的形状不同(故意)。 所以我想用 np.nan-rows 填充它们。
重要提示:np.nan-rows 可以位于样本中的任何位置,只要它们不破坏原始行即可。 -> 所以它们可以随机位于行之间,但不能更改原始行。
TL,DR:我需要保持原始数据行的顺序,而不是更改这些行中的值,否则用 np.nan-rows 填充样本,直到它们都具有相同的长度(->最长),无论在哪里。 (并且以一种省时的方式,如何?)
理想结果如下所示:(您可以在下面看到随机 np.nanrow 定位的另一种可能结果)。
print(new_res)
>>>
[
[
[ np.nan, np.nan, np.nan, np.nan, np.nan ],
[ np.nan, np.nan, np.nan, np.nan, np.nan ],
[ np.nan, np.nan, np.nan, np.nan, np.nan ],
[ np.nan, np.nan, np.nan, np.nan, np.nan ],
["2019-06-17 08:45:00", 12089.89, 12089.89, 12087.71, 12087.71 ]
],
[
[ np.nan, np.nan, np.nan, np.nan, np.nan ],
[ np.nan, np.nan, np.nan, np.nan, np.nan ],
[ np.nan, np.nan, np.nan, np.nan, np.nan ],
["2019-06-17 08:45:00", 12089.89, 12089.89, 12087.71, 12087.71 ],
["2019-06-17 08:46:00", 12087.91, np.nan, 12087.71, 12087.91 ]
],
[
[ np.nan, np.nan, np.nan, np.nan, np.nan ],
[ np.nan, np.nan, np.nan, np.nan, np.nan ],
["2019-06-17 08:45:00", 12089.89, 12089.89, 12087.71, 12087.71 ],
["2019-06-17 08:46:00" , 12087.91 , np.nan, 12087.71, 12087.91 ],
["2019-06-17 08:47:00" , 12088.21 , 12088.21, 12084.21 , 12085.21 ]
],
[
[ np.nan np.nan np.nan np.nan np.nan ]
["2019-06-17 08:45:00", 12089.89, 12089.89, 12087.71 , 12087.71 ],
["2019-06-17 08:46:00" , 12087.91 , np.nan, 12087.71, 12087.91 ],
["2019-06-17 08:47:00" , 12088.21 , 12088.21, 12084.21 , 12085.21 ],
["2019-06-17 08:48:00" , 12085.09 , 12090.21, 12084.91 , 12089.41 ]
],
[
["2019-06-17 08:45:00", 12089.89, 12089.89 , 12087.71 , 12087.71 ],
["2019-06-17 08:46:00" , 12087.91 , np.nan, 12087.71, 12087.91 ],
["2019-06-17 08:47:00" , 12088.21 , 12088.21 , 12084.21 , 12085.21 ],
["2019-06-17 08:48:00" , 12085.09 , 12090.21 , 12084.91 , 12089.41 ],
["2019-06-17 08:49:00" , 12089.71 , 12090.21 , 12087.21 , 12088.21 ]
]
]
随机添加的 np.nan-rows 样本:
print(new_res)
>>>
[
[
[ np.nan, np.nan, np.nan, np.nan, np.nan ],
["2019-06-17 08:45:00", 12089.89, 12089.89, 12087.71, 12087.71 ]
[ np.nan, np.nan, np.nan, np.nan, np.nan ],
[ np.nan, np.nan, np.nan, np.nan, np.nan ],
[ np.nan, np.nan, np.nan, np.nan, np.nan ]
],
[
[ np.nan, np.nan, np.nan, np.nan, np.nan ],
[ np.nan, np.nan, np.nan, np.nan, np.nan ],
["2019-06-17 08:45:00", 12089.89, 12089.89, 12087.71, 12087.71 ],
[ np.nan, np.nan, np.nan, np.nan, np.nan ],
["2019-06-17 08:46:00", 12087.91, np.nan, 12087.71, 12087.91 ]
],
[
["2019-06-17 08:45:00", 12089.89, 12089.89, 12087.71, 12087.71 ],
["2019-06-17 08:46:00" , 12087.91 , np.nan, 12087.71, 12087.91 ],
[ np.nan, np.nan, np.nan, np.nan, np.nan ],
[ np.nan, np.nan, np.nan, np.nan, np.nan ],
["2019-06-17 08:47:00" , 12088.21 , 12088.21, 12084.21 , 12085.21 ]
],
[
["2019-06-17 08:45:00", 12089.89, 12089.89, 12087.71 , 12087.71 ],
["2019-06-17 08:46:00" , 12087.91 , np.nan, 12087.71, 12087.91 ],
[ np.nan, np.nan, np.nan, np.nan, np.nan ],
["2019-06-17 08:47:00" , 12088.21 , 12088.21, 12084.21 , 12085.21 ],
["2019-06-17 08:48:00" , 12085.09 , 12090.21, 12084.91 , 12089.41 ]
],
[
["2019-06-17 08:45:00", 12089.89, 12089.89 , 12087.71 , 12087.71 ],
["2019-06-17 08:46:00" , 12087.91 , np.nan, 12087.71, 12087.91 ],
["2019-06-17 08:47:00" , 12088.21 , 12088.21 , 12084.21 , 12085.21 ],
["2019-06-17 08:48:00" , 12085.09 , 12090.21 , 12084.91 , 12089.41 ],
["2019-06-17 08:49:00" , 12089.71 , 12090.21 , 12087.21 , 12088.21 ]
]
]
【问题讨论】:
-
This 很有用。专注于“最小”。
-
@zabop 感谢您的提示^^ 编辑它。
标签: python pandas performance numpy dataframe