我被一個問題困住了,如果你能幫助我,那就太好了:) 我用熊貓創建了一個資料框:看起來像這樣:
| 主機名 | 日期 |
|---|---|
| 一種 | 2021-01-01 12:30 |
| 乙 | 2021-01-01 12:42 |
| 乙 | 2021-02-01 12:30 |
| 一種 | 2021-02-01 12:40 |
| 一種 | 2021-02-25 12:40 |
| 一種 | 2021-03-01 12:41 |
| 一種 | 2021-03-01 12:42 |
我嘗試根據上個月進行聚合,但它不起作用。最終結果應如下所示:
| 主機名 | 日期 | 前一個月 |
|---|---|---|
| 一種 | 2021-01-01 12:30 | 南 |
| 乙 | 2021-01-01 12:42 | 南 |
| 乙 | 2021-02-01 12:30 | 1 |
| 一種 | 2021-02-01 12:40 | 南 |
| 一種 | 2021-02-25 12:40 | 1 |
| 一種 | 2021-03-01 12:41 | 2 |
| 一種 | 2021-03-01 12:42 | 3 |
對于每一行 Date 應該看起來是一個月前的,并且 Aggregat 找到的主機名的數量。例如行號 6 從 2021-02-01 12:41 到 2021-03-01 12:41 計算主機名 A
我嘗試做但失敗的事情:
- 提取上個月:
df['Date Before'] = df['Date'] - pd.DateOffset(months=1)
- 和本月之間的合計
df.resample('M', on='Date').HostName.count()
df.groupby('HostName').resample('M', on='Date Before').HostName.count()
請幫助我非常感謝!!!
uj5u.com熱心網友回復:
使用 shift 回顧資料框列的行。df 是按結果分組。
data1="""HostName Date
A 2021-01-01 12:30
B 2021-01-01 12:42
B 2021-02-01 12:30
A 2021-02-01 12:40
A 2021-02-25 12:40
A 2021-03-01 12:41
A 2021-03-01 12:42"""
df = pd.read_table(StringIO(data1), sep='\t')
df['Date']=pd.to_datetime(df['Date'])
grouped=df.groupby('HostName')['Date']
def previous_date(group):
return group.sort_values().shift(1)
df['Previous Date']=grouped.apply(previous_date)
df['Previous Count']=df.apply(lambda x: x['Date']-x['Previous Date'],axis=1)
print(df.sort_values(by=["HostName","Date"]))
df['Con'] = np.where( (df['Previous Date'].notnull() & df['Previous Count']>0) , 1, 0)
print(df.sort_values(by=["HostName","Date"]))
輸出:
HostName Date Previous Date Previous Count Con
0 A 2021-01-01 12:30:00 NaT NaN 0
3 A 2021-02-01 12:40:00 2021-01-01 12:30:00 31.0 1
4 A 2021-02-25 12:40:00 2021-02-01 12:40:00 24.0 1
5 A 2021-03-01 12:41:00 2021-02-25 12:40:00 4.0 1
6 A 2021-03-01 12:42:00 2021-03-01 12:41:00 0.0 0
1 B 2021-01-01 12:42:00 NaT NaN 0
2 B 2021-02-01 12:30:00 2021-01-01 12:42:00 30.0 1
使用 cumsum 按主機名創建運行總數
uj5u.com熱心網友回復:
我找到了解決方案:原始:
HostName Date
0 A 2021-01-01 12:30:00
1 B 2021-01-01 12:42:00
2 B 2021-02-01 12:30:00
3 A 2021-02-01 12:40:00
4 A 2021-02-25 12:40:00
5 A 2021-03-01 12:41:00
6 A 2021-03-01 12:42:00
獲得前一個月
df['Month Before'] = df['Date'] - pd.DateOffset(months=1)
訂購資料場
df = df.sort_values(['HostName','Date'])
由主機轉移
df['prev_value'] = df.groupby('HostName')['Date'].shift()
檢查
df['Con'] = np.where((df['Month Before'] <= df['prev_value']) | (df['prev_value'].notnull()) , 1, 0)
和組
gpc = df.groupby(['HostName','Con'])['HostName']
df['Count Per Host'] = gpc.cumcount()
看起來像那樣
HostName Date Month Before prev_value Con CountPerHost
0 A 2021-01-01 12:30:00 2020-12-01 12:30:00 NaT 0 0
3 A 2021-02-01 12:40:00 2021-01-01 12:40:00 2021-01-01 12:30:00 0 0
4 A 2021-02-25 12:40:00 2021-01-25 12:40:00 2021-02-01 12:40:00 1 1
5 A 2021-03-01 12:41:00 2021-02-01 12:41:00 2021-02-25 12:40:00 1 2
6 A 2021-03-01 12:42:00 2021-02-01 12:42:00 2021-03-01 12:41:00 1 3
1 B 2021-01-01 12:42:00 2020-12-01 12:42:00 NaT 0 0
2 B 2021-02-01 12:30:00 2021-01-01 12:30:00 2021-01-01 12:42:00 1 0
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/377463.html
下一篇:繪制多類問題的ROC曲線
