我有一个熊猫数据框,其中包含运行列,类型,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