我有這個資料集
| 國家 | 日期 | 值A |
|---|---|---|
| 美國 | 2020-02-01 | 325 |
| 美國 | 2020-02-02 | 444 |
| 美國 | 2020-02-03 | 125 |
| 美國 | 2020-02-04 | 456 |
| 美國 | 2020-02-05 | 325 |
| 美國 | 2020-02-06 | 465 |
| 美國 | 2020-02-07 | 548 |
| 美國 | 2020-02-08 | 696 |
| 法蘭克福機場 | 2020-02-01 | 357 |
| 法蘭克福機場 | 2020-02-02 | 123 |
| 法蘭克福機場 | 2020-02-03 | 125 |
| 法蘭克福機場 | 2020-02-04 | 987 |
| 法蘭克福機場 | 2020-02-05 | 343 |
| 法蘭克福機場 | 2020-02-06 | 874 |
| 法蘭克福機場 | 2020-02-07 | 658 |
| 法蘭克福機場 | 2020-02-08 | 413 |
我想為每個國家/地區創建一個序列,以便以后按國家/地區和每 4 天進行分組。我正在尋找這樣的東西
| 國家 | 日期 | 值A | 每個_4 |
|---|---|---|---|
| 美國 | 2020-02-01 | 325 | 1 |
| 美國 | 2020-02-02 | 444 | 1 |
| 美國 | 2020-02-03 | 125 | 1 |
| 美國 | 2020-02-04 | 456 | 1 |
| 美國 | 2020-02-05 | 325 | 2 |
| 美國 | 2020-02-06 | 465 | 2 |
| 美國 | 2020-02-07 | 548 | 2 |
| 美國 | 2020-02-08 | 696 | 2 |
| 法蘭克福機場 | 2020-02-01 | 357 | 1 |
| 法蘭克福機場 | 2020-02-02 | 123 | 1 |
| 法蘭克福機場 | 2020-02-03 | 125 | 1 |
| 法蘭克福機場 | 2020-02-04 | 987 | 1 |
| 法蘭克福機場 | 2020-02-05 | 343 | 2 |
| 法蘭克福機場 | 2020-02-06 | 874 | 2 |
| 法蘭克福機場 | 2020-02-07 | 658 | 2 |
| 法蘭克福機場 | 2020-02-08 | 413 | 2 |
在 R 我相信它會像
df = df %>% groupby(Country) %>% mutate(Every_4 = rep(seq(),4))
有人可以幫忙嗎?非常感謝!!
uj5u.com熱心網友回復:
使用groupby_cumcount:
df['every_4'] = df.groupby('Country').cumcount().floordiv(4).add(1)
print(df)
# Output:
Country Date ValueA every_4
0 USA 2020-02-01 325 1
1 USA 2020-02-02 444 1
2 USA 2020-02-03 125 1
3 USA 2020-02-04 456 1
4 USA 2020-02-05 325 2
5 USA 2020-02-06 465 2
6 USA 2020-02-07 548 2
7 USA 2020-02-08 696 2
8 FRA 2020-02-01 357 1
9 FRA 2020-02-02 123 1
10 FRA 2020-02-03 125 1
11 FRA 2020-02-04 987 1
12 FRA 2020-02-05 343 2
13 FRA 2020-02-06 874 2
14 FRA 2020-02-07 658 2
15 FRA 2020-02-08 413 2
uj5u.com熱心網友回復:
如果日期未排序,或者缺少一些日期,事情會變得更加復雜。
df.loc[:, "Date"] = pd.to_datetime(df["Date"])
date = df.groupby("Country")["Date"]
df["every_4"] = date.transform(lambda x: (x - x.min()).dt.days // 4 1)
輸出
上面的代碼產生以下輸出。
Country Date ValueA every_4
0 USA 2020-02-01 325 1
1 USA 2020-02-02 444 1
2 USA 2020-02-03 125 1
3 USA 2020-02-04 456 1
4 USA 2020-02-05 325 2
5 USA 2020-02-06 465 2
6 USA 2020-02-07 548 2
7 USA 2020-02-08 696 2
8 FRA 2020-02-01 357 1
9 FRA 2020-02-02 123 1
10 FRA 2020-02-03 125 1
11 FRA 2020-02-04 987 1
12 FRA 2020-02-05 343 2
13 FRA 2020-02-06 874 2
14 FRA 2020-02-07 658 2
15 FRA 2020-02-08 413 2
uj5u.com熱心網友回復:
用:
df['every_4'] = df.groupby('Country').transform(lambda x: x.groupby(x.index//4).ngroup() 1)['ValueA']
輸出:
Country Date ValueA every_4
0 USA 2020-02-01 325 1
1 USA 2020-02-02 444 1
2 USA 2020-02-03 125 1
3 USA 2020-02-04 456 1
4 USA 2020-02-05 325 2
5 USA 2020-02-06 465 2
6 USA 2020-02-07 548 2
7 USA 2020-02-08 696 2
8 FRA 2020-02-01 357 1
9 FRA 2020-02-02 123 1
10 FRA 2020-02-03 125 1
11 FRA 2020-02-04 987 1
12 FRA 2020-02-05 343 2
13 FRA 2020-02-06 874 2
14 FRA 2020-02-07 658 2
15 FRA 2020-02-08 413 2
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/333957.html
