我在 Python 中有以下資料框:
| ID | country_ID | 訪問時間 |
|---|---|---|
| 0 | ESP | 10天12:03:00 |
| 0 | 英文 | 5天 10:02:00 |
| 1 | 英文 | 3 天 08:05:03 |
| 1 | ESP | 1 天 03:02:00 |
| 1 | 英文 | 2 天 07:01:03 |
| 1 | 英文 | 3天 01:00:52 |
| 2 | 英文 | 0 天 12:01:02 |
| 2 | 英文 | 1 天 22:10:03 |
| 2 | 英文 | 0 天 20:00:50 |
對于每個 ID,我想獲得:
avg_visit_ESP 和 avg_visit_ENG 列。
- country_ID = 每個 ID 的 ESP 的平均訪問時間。
- 每個 ID 的 country_ID = ENG 的平均訪問時間。
| ID | avg_visit_ESP | avg_visit_ENG |
|---|---|---|
| 0 | 10天12:03:00 | 5天 10:02:00 |
| 1 | 1 天 03:02:00 | (8 天 16:06:58) / 3 |
| 2 | 鈉鹽 | (3 天 06:11:55) / 3 |
我不知道如何在 groupby 中指定雙重分組,首先按 ID,然后按 country_ID。如果你能幫助我,我將不勝感激。
PS:visit_time(timedelta)的日期格式,可以進行加法和除法,沒有任何明顯的問題。
from datetime import datetime, timedelta
date1 = pd.to_datetime('2022-02-04 10:10:21', format='%Y-%m-%d %H:%M:%S')
date2 = pd.to_datetime('2022-02-05 20:15:41', format='%Y-%m-%d %H:%M:%S')
date3 = pd.to_datetime('2022-02-07 20:15:41', format='%Y-%m-%d %H:%M:%S')
sum1date = date2-date1
sum2date = date3-date2
sum3date = date3-date1
print((sum1date sum2date sum3date)/3)
uj5u.com熱心網友回復:
(df.groupby(['ID', 'country_ID'])['visit_time']
.mean(numeric_only=False)
.unstack()
.add_prefix('avg_visit_')
)
應該做的伎倆
>>> df = pd.read_clipboard(sep='\s\s ')
>>> df.columns = [s.strip() for s in df]
>>> df['visit_time'] = pd.to_timedelta(df['visit_time'])
>>> df.groupby(['ID', 'country_ID'])['visit_time'].mean(numeric_only=False).unstack().add_prefix('avg_visit_')
country_ID avg_visit_ENG avg_visit_ESP
ID
0 5 days 10:02:00 10 days 12:03:00
1 2 days 21:22:19.333333333 1 days 03:02:00
2 1 days 02:03:58.333333333 NaT
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/444467.html
上一篇:在R中的char列中轉換整數值
下一篇:R函式應用于資料框中的串列
