我有以下資料框:
df = pd.DataFrame({"id": ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'C','C','C','C'],
"date": [2015, 2016, 2017, 2018,
2015, 2016, 2017, 2018,
2015, 2016, 2017, 2018],
"col_1": [1,1,1,0,1,0,1,1,0,1,1,1]})
如果“col_1”有三個連續的 1,我想添加一個新的 col,它應該是組的虛擬 1。生成的資料框應為:
df_new = pd.DataFrame({"id": ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'C','C','C','C' ],
"date": [2015, 2016, 2017, 2018,
2015, 2016, 2017, 2018,
2015, 2016, 2017, 2018],
"col_1": [1,1,1,0,1,0,1,1,0,1,1,1],
"col_2": [1,1,1,1,0,0,0,0,1,1,1,1]})
uj5u.com熱心網友回復:
你也可以這樣做。
df['col_2'] = (df.groupby('id')['col_1']
.transform(lambda x: x.rolling(3).sum().eq(3).any())
.astype(int))
df
輸出:
id date col_1 col_2
0 A 2015 1 1
1 A 2016 1 1
2 A 2017 1 1
3 A 2018 0 1
4 B 2015 1 0
5 B 2016 0 0
6 B 2017 1 0
7 B 2018 1 0
8 C 2015 0 1
9 C 2016 1 1
10 C 2017 1 1
11 C 2018 1 1
uj5u.com熱心網友回復:
試試這個
df = pd.DataFrame({"id": ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'C','C','C','C'],
"date": [2015, 2016, 2017, 2018, 2015, 2016, 2017, 2018, 2015, 2016, 2017, 2018],
"col_1": [1,1,1,0,1,0,1,1,0,1,1,1]})
# identify 3 consecutive 1s
v = df.groupby('id')['col_1'].rolling(3).sum().eq(3)
# identify which ids contain consecutive 1s
ids = next(zip(*v[v].index))
# assign new column
df['col_2'] = df['id'].isin(ids).astype(int)
print(df)
id date col_1 col_2
0 A 2015 1 1
1 A 2016 1 1
2 A 2017 1 1
3 A 2018 0 1
4 B 2015 1 0
5 B 2016 0 0
6 B 2017 1 0
7 B 2018 1 0
8 C 2015 0 1
9 C 2016 1 1
10 C 2017 1 1
11 C 2018 1 1
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/479715.html
