我正在研究如下所示的資料框:
------- ---- ------ --
| Value | ID | Date | |
------- ---- ------ --
| 1 | 5 | 2012 | |
| 1 | 5 | 2013 | |
| 0 | 12 | 2017 | |
| 0 | 12 | 2022 | |
| 1 | 27 | 2005 | |
| 1 | 27 | 2011 | |
------- ---- ------ --
僅使用具有“Value”==“1”(“value 是布林值)的行,我想按 ID 對資料框進行分組并將字串“latest”輸入到新(空白)列,給出以下輸出:
------- ---- ------ --------
| Value | ID | Date | Latest |
------- ---- ------ --------
| 1 | 5 | 2012 | |
| 1 | 5 | 2013 | Latest |
| 0 | 12 | 2017 | |
| 0 | 12 | 2022 | |
| 1 | 27 | 2005 | |
| 1 | 27 | 2011 | Latest |
------- ---- ------ --------
pandas 的語法讓我很吃驚,因為我對 Python 還很陌生。
在 RI 假設我會嘗試類似的東西
df %>% select(Value == "1") %>% group_by(ID) %>% select(max(Date)
但我不確定 Pandas 中的語法...我試圖首先選擇滿足條件“值 == 1”的行子集,方法是使用
q = df.query('Value == 1')
my_query_index = q.index
my_query_index
這將回傳所有行的索引,但我不確定如何在按 max(date) 分組和過濾之前將其合并到資料框中。
所有幫助表示贊賞。謝謝你。
uj5u.com熱心網友回復:
你可以這樣做:
latest = df.query('Value==1').groupby("ID").max("year").assign(Latest = "Latest")
pd.merge(df,latest,how="outer")
Value ID Date Latest
0 1 5 2012 NaN
1 1 5 2013 Latest
2 0 12 2017 NaN
3 0 12 2022 NaN
4 1 27 2005 NaN
5 1 27 2011 Latest
uj5u.com熱心網友回復:
- 按
'ID'那時排序'Date' - 用于
duplicated(keep='last')標識每組中的最后一項 loc分配到正確的位置
df = df.sort_values(['ID', 'Date'])
mask1 = df.Value.eq(1)
mask2 = ~df.ID.duplicated(keep='last')
df.loc[mask1 & mask2, 'Latest'] = 'Latest'
df
Value ID Date Latest
0 1 5 2012 NaN
1 1 5 2013 Latest
2 0 12 2017 NaN
3 0 12 2022 NaN
4 1 27 2005 NaN
5 1 27 2011 Latest
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/447934.html
