Pandas 时间分组列
我的df如下所示:Pandas 时间分组列,pandas,dataframe,Pandas,Dataframe,我的df如下所示: Index Receiver Length Retry 1970-01-01 00:00:00.000000000 R1 10 0 1970-01-01 00:00:00.800000000 R1 10 1 1970-01-01 00:00:01.000287000
Index Receiver Length Retry
1970-01-01 00:00:00.000000000 R1 10 0
1970-01-01 00:00:00.800000000 R1 10 1
1970-01-01 00:00:01.000287000 R2 10 0
1970-01-01 00:00:01.600896000 R2 10 0
1970-01-01 00:00:02.001388000 R1 10 1
1970-01-01 00:00:02.004698000 R1 10 1
1970-01-01 00:00:02.006706000 R2 10 0
1970-01-01 00:00:02.501351000 R2 10 0
1970-01-01 00:00:02.810382000 R1 10 0
1970-01-01 00:00:03.001981000 R1 10 1
1970-01-01 00:00:03.377116000 R1 10 1
1970-01-01 00:00:03.701811000 R2 10 1
1970-01-01 00:00:03.910326000 R2 10 0
1970-01-01 00:00:03.951355000 R2 10 1
我需要按时间(1S)对df进行分组,然后在每个组中,如果Retry==1,则为每个R1和R2添加长度列值
我使用了下面的代码,但当R1和R2没有重试=1(即不满足条件)时,它似乎会忽略行
期望输出为:
Index R1 R2
1970-01-01 00:00:00 10 0
1970-01-01 00:00:01 0 0
1970-01-01 00:00:02 20 0
1970-01-01 00:00:03 20 20
可以找到类似的问题。您需要添加缺少的datetime
s:
df2 = df2.reindex(pd.date_range(df2.index[0], df2.index[-1], freq='1S'), fill_value=0)
print (df2)
Receiver R1 R2
1970-01-01 00:00:00 10.0 0.0
1970-01-01 00:00:01 0.0 0.0
1970-01-01 00:00:02 20.0 0.0
1970-01-01 00:00:03 20.0 20.0
我将首先使用数据透视,然后将数据分组:
df['Value'] = df['Length']*df['Retry']
df2 = pd.pivot_table(df, index=df.index, columns='Receiver', values='Value')
df2 = df2.groupby([pd.Grouper(freq='1S')]).sum()
它给出的错误是“UnboundLocalError:assignment前引用的局部变量“df2”在
df2=df.query(“Retry==1”).groupby([pd.Grouper(freq='1S'),'Receiver']).Length.sum().unstack().fillna(0)
是的,我就是这么做的。这两行在一个函数内。当我调用该函数时,它在您发布的行中给出了此错误。如果我在函数外同时运行这两行,它就可以正常工作。有什么线索吗?你能看到你的功能吗?是的,对,我正在想办法。。我我会再打给你的。谢谢
df['Value'] = df['Length']*df['Retry']
df2 = pd.pivot_table(df, index=df.index, columns='Receiver', values='Value')
df2 = df2.groupby([pd.Grouper(freq='1S')]).sum()