下面给出了我的数据框架
我想从每一列中提取所有非零值,并以如下方式进行汇总
如果任何值在一段时间内重复,则值的开始时间应位于'FROM‘列,值的结束时间应位于列名称位于'BLK-ASB-INV’列的'TO‘列,值应位于'Scount’列。为此,我已经开始编写如下代码
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中有什么方法可以做到这一点吗?提前感谢您的帮助。
发布于 2020-01-22 11:29:09
我终于解决了我的问题,我已经写了下面给出的代码完美地为我工作。
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=[]
作为参考,以下是输出数据
https://stackoverflow.com/questions/59798275
复制相似问题