python - Pandas 中的滚动行过滤器/交叉表?

标签 python python-2.7 pandas

我有一个高度稀疏的数据帧(每行只有一个非零值)由非常规时间戳索引,我正在尝试执行以下操作。

对于给定列中的每个非零值,我想计算给定时间增量内其他列中其他非零值的数量。在某种程度上,我正在尝试计算类似于滚动 cross_tab 的内容。

到目前为止,我的解决方案既丑陋又缓慢,因为我还没有想出如何使用切片和滚动来做到这一点。它看起来像:

delta = 1
values = pd.DataFrame(0,index= df.columns,columns= df.columns)
for j in df.columns:
    for i in range(len(df[df[j]!=0].index)-1):
        #min is used to avoid overlapping
        values[j] +=df[(df.index<min((df[df[j]!=0].index + pd.tseries.timedeltas.to_timedelta(delta, unit='h'))[i],df[df[j]!=0].index[i+1]))&(df.index>=df[df[j]!=0].index[i])].astype(bool).sum()
values = values.T

玩具示例数据框是:

 df = pd.DataFrame.from_dict({"2016-01-01 10:00.00":[0,1],
                         "2016-01-01 10:30.00":[1,0],
                         "2016-01-01 12:00.00":[0,1],
                         "2016-01-01 14:00.00":[1,0]},
                        orient="index")
 df.columns=['a','b']
 df.index = pd.to_datetime(df.index)

                      a  b
 2016-01-01 10:00:00  0  1
 2016-01-01 10:30:00  1  0
 2016-01-01 12:00:00  0  1
 2016-01-01 14:00:00  1  0

所需的输出应如下所示(计数取决于时间增量):

      a     b
a     1     0
b     1     1

最佳答案

很难说出你到底想要什么。但听起来有点像这样

我想使用 pandas 0.19 的新功能。时间感知滚动。为了使用它,我们需要一个排序索引。

d1 = df.sort_index()

现在,假设我们要在正负一小时内进行计数。让我们从为索引的每个元素添加两个小时开始

d1.index = d1.index + pd.offsets.Hour(2)

然后我们将回顾四个小时。这就像相对于原始索引向前看两个小时和向后看两个小时。

d2 = d1.rolling('4H').sum()
d2.index = d2.index - pd.offsets.Hour(2)
d2

                       a    b
2016-01-01 10:00:00  0.0  1.0
2016-01-01 10:30:00  1.0  1.0
2016-01-01 12:00:00  1.0  2.0
2016-01-01 14:00:00  2.0  1.0

关于python - Pandas 中的滚动行过滤器/交叉表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42015635/

相关文章:

python - 为什么 python 中的 Singleton 多次调用 __init__ 以及如何避免它?

python - 在范围创建中添加字符串

python - 文本编辑+组合框+pyqt4

python-2.7 - 利用ES功能批量插入后删除重复项

python - Pandas Dataframe MultiIndex 将多索引的一个级别转换到另一个轴,同时保留原始轴中的另一个级别

python - 有没有办法为每个生成的输出调用一次 API 而不是两次?

python - 使用python减去一个文件中一列中的2个数字

python Pandas : Lookup table by searching for substring

python - 验证网络转储(PCAP 文件)上的 DoS/DDoS 攻击

python - 在 python 中传递可选的数据帧参数