如何对包含数组的数据框列应用重采样

时间:2018-11-21 17:35:27

标签: python pandas

我有一个熊猫数据框,其中包含运行列,类型,vectime和vecvalue的列。 对于type ==“ vector”的行(此处可能不是正确的术语),vectime和vecvalue包含数组:

loaded_csv.tail(2)

     run    type    module  name    attrname    attrvalue   value   vectime vecvalue
709 run-id1 vector  client499.app[0]    packetReceived:vector(packetBytes)  NaN None    NaN [20.02926688, 20.04433504, 20.04556544, 20.059...   [1460.0, 1460.0, 1460.0, 1460.0, 1460.0, 1460....
710 run-id1 attr    client499.app[0]    packetReceived:vector(packetBytes)  checkSignals    False   NaN None    None

“ vectime”包含“ vecvalue”中值的时间点。

我想运行一些简单的事情,例如将min()max()应用于数组,并通过运行以下操作将值分配给原始数据帧:

loaded_csv.loc[(loaded_csv.type == "vector"),('min_vectime')] = loaded_csv.loc[(loaded_csv.type == "vector"),('vectime')].apply(min)

在我的理解中,“过滤”类型为==向量的行并添加具有适当值的新列“ min_vectime”。

但是我无法弄清楚如何使用“ vectime”作为索引对“ vecvalue”进行重采样,并替换原始值(使用重采样的值)或添加新的列。

我找到了一种方法,可以通过从数据框中获取数据,创建系列并应用重采样来实现其中的一部分。

for row in loaded_csv[loaded_csv.type == "vector"].itertuples():
    print_series = pd.Series(row.vecvalue, index = pd.to_timedelta(row.vectime,  unit='s'))
    result = print_series.resample('10ms',label='right').sum()*8
    resultPlot = result.rolling( window=30, min_periods=10).mean()

我正在寻找一种更清洁,更简单的方法。

在每个任务上都有很多示例-切片数据帧,无论是直接使用.resample还是通过.apply()都应用函数,但是在更简单/不同的数据帧结构上,我迷失了它们。

部分解决方案

我找到了一种将数组转换为Series并对其重新采样的方法,但是当我尝试作为新列插入数据框时,我只会得到NaN。 我将其包装在pd.Dataframe()中,以使其包含在结果Dataframe中。 但是现在我有一列包含Dataframe [Series],而不仅仅是Series。

loaded_csv.loc[(loaded_csv.type == "vector"),('resampled')] = loaded_csv.loc[(loaded_csv.type == "vector"),('vectime', 'vecvalue')].apply(lambda x:  pd.DataFrame(pd.Series(x.vecvalue, index = (pd.to_timedelta(x.vectime, unit='s')))), axis= 1)
loaded_csv.loc[(loaded_csv3.type == "vector"),('resampled')].head()

76                           0
00:00:20.029266  1460....
157                          0
Name: resampled, dtype: object

0 个答案:

没有答案