我有一個熊貓資料框:
datetime fault
2021-08-06T09:04:00 No
2021-08-06T09:05:00 No
2021-08-06T09:06:00 Yes
2021-08-06T09:07:00 Yes
2021-08-06T09:08:00 No
我想獲得故障列為 YES 時的持續時間(以分鐘為單位)。
所以輸出應該是 2 分鐘,即 (2021-08-06T09:06:00 2021-08-06T09:07:00)
uj5u.com熱心網友回復:
首先,您需要將datetime列轉換為日期時間物件。
df["datetime"] = pd.to_datetime(df["datetime"], format="%Y-%m-%dT%H:%M:%S")
現在我們應該"Yes"在fault列中找到索引:
indices = df.index[df['fault'] == "Yes"].tolist()
現在我們可以迭代indices以找到具有"Yes"和前一列的列:
注意:我不會檢查錯誤。但是在索引中indices是0前一行不存在。你會得到錯誤。或者得到最后一行。我不知道。
現在我們得到每個索引和前一個索引。獲取時間差異。并以分鐘為單位計算值:
for index in indices:
prev = df.iloc[index - 1]
current = df.iloc[index]
print(pd.Timedelta(current["datetime"] - prev["datetime"]).seconds/60)
也許你可以去掉prev和current直接寫在計算行上:
for index in indices:
print(pd.Timedelta(df.iloc[index]["datetime"] - df.iloc[index - 1]["datetime"]).seconds/60)
由于我們計算了這些值,我們可以使用串列理解來添加它們:
total_diffs = sum(
[
pd.Timedelta(df.iloc[index]["datetime"] - df.iloc[index - 1]["datetime"]).seconds/60
for index in indices
]
)
最后整個代碼將是:
df["datetime"] = pd.to_datetime(df["datetime"], format="%Y-%m-%dT%H:%M:%S")
indices = df.index[df['fault'] == "Yes"].tolist()
total_diffs = sum(
[
pd.Timedelta(df.iloc[index]["datetime"] - df.iloc[index - 1]["datetime"]).seconds/60
for index in indices
]
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/352684.html
上一篇:從陣列中創建資料框
下一篇:檢查字串是否在另一列熊貓中
