数据帧列中的“三明治”值?

2024-05-17 05:43:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个[1008961 rows x 8 columns]数据框,看起来像这样:

         Position  Price  Side  Size                 time   init       dt best_pricejump
0               1   3542     1   300  1495087206897454000   True    0.000            NaN
1               2   3541     1   484  1495087206906657000   True    9.203            NaN
2               3   3540     1   423  1495087206914836000   True    8.179            NaN
3               4   3539     1   599  1495087206922854000   True    8.018            NaN
4               5   3539     1   599  1495087206930944000   True    8.018            NaN

以及一个包含我正在查看的某些片段的列表:

[slice(0, 5, None), slice(9, 35, None), slice(39, 131, None), slice(135, 141, None),...]

如何有效地“sandwhich”列时间的值,以便切片数据帧的每个时间值都与切片的最后一个值相似?你知道吗

上面的例子是:

         Position  Price  Side  Size                 time   init       dt best_pricejump
0               1   3542     1   300  1495087206930944000   True    0.000            NaN
1               2   3541     1   484  1495087206930944000   True    9.203            NaN
2               3   3540     1   423  1495087206930944000   True    8.179            NaN
3               4   3539     1   599  1495087206930944000   True    8.018            NaN
4               5   3539     1   599  1495087206930944000   True    8.018            NaN

我有一个解决方案,但它非常慢(它需要14分钟)。有没有更快的方法?你知道吗

for slc in list_of_slices:
    df["time"][slc] = (df["time"][slc]).iloc[-1] 

Tags: 数据nonetruesizetimeinitdtposition
2条回答

可以尝试连接操作而不是循环。虽然我个人不知道如何跳出一个初始循环,但我首先在切片器中循环,并为每个切片器范围分配一个组。然后得到一个只包含起始时间组的数据帧。然后重新加入。我不确定这是否更快。它取决于在每个循环中切片所需的时间,而不是赋值。也许你可以试试看,让我知道这样或那样?你知道吗

df['G'] = np.nan
for n, k in enumerate(slicr):
    df.ix[df.ix[list(range(k.start,k.stop)),'position'],'G'] = n

map_df = df.ix[[k.start for k in slicr], ['G', 'time']]
new_df = pd.merge(df, map_df, on='G', how='left')

您可以使用ilociat尝试按位置获取标量:

#get position of column time
loc = df.columns.get_loc("time")
for slc in list_of_slices:
    df.iloc[slc, loc] = df["time"].iat[slc.stop-1]

相关问题 更多 >