首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用时间戳汇总pandas数据帧中的非零值或任何值- From_Time & To_Time

使用时间戳汇总pandas数据帧中的非零值或任何值- From_Time & To_Time
EN

Stack Overflow用户
提问于 2020-01-18 06:58:43
回答 1查看 89关注 0票数 2

下面给出了我的数据框架

我想从每一列中提取所有非零值,并以如下方式进行汇总

如果任何值在一段时间内重复,则值的开始时间应位于'FROM‘列,值的结束时间应位于列名称位于'BLK-ASB-INV’列的'TO‘列,值应位于'Scount’列。为此,我已经开始编写如下代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import pandas as pd

df = pd.read_excel("StringFault_Bagewadi_16-01-2020.xlsx")
df = df.set_index(['Date (+05:30)'])

cols=['BLK-ASB-INV', 'Scount', 'FROM', 'TO']
res=pd.DataFrame(columns=cols)
for col in df.columns:
    ss=df[col].iloc[df[col].to_numpy().nonzero()[0]]
    ....... 

在那之后,我无法思考我应该如何处理才能获得想要的输出。在python中有什么方法可以做到这一点吗?提前感谢您的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-22 11:29:09

我终于解决了我的问题,我已经写了下面给出的代码完美地为我工作。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import pandas as pd
df = pd.read_excel("StringFault.xlsx")
df = df.set_index(['Date (+05:30)'])
cols=['BLK-ASB-INV', 'Scount', 'FROM', 'TO']
res=pd.DataFrame(columns=cols)
for col in df.columns:
    device = []
    for i in range(len(df[col])):
        if df[col][i] == 0:
            None
        else:    
            if i < len(df[col])-1 and df[col][i]==df[col][i+1]:
                try: 
                    if df[col].index[i] > device[2]:
                        continue
                except IndexError:
                    device.append(df[col].name)
                    device.append(df[col][i])
                    device.append(df[col].index[i])
                continue
            else:

                 if len(device)==3:
                     device.append(df[col].index[i])
                     res = res.append({'BLK-ASB-INV':device[0], 'Scount':device[1], 'FROM':device[2], 'TO': device[3]}, ignore_index=True) 
                     device=[]
                 else:
                     device.append(df[col].name)
                     device.append(df[col][i])
                     if i == 0:
                         device.append(df[col].index[i])
                     else:
                         device.append(df[col].index[i-1])
                     device.append(df[col].index[i])
                     res = res.append({'BLK-ASB-INV':device[0], 'Scount':device[1], 'FROM':device[2], 'TO': device[3]}, ignore_index=True) 
                     device=[]

作为参考,以下是输出数据

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59798275

复制
相关文章

相似问题

领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文