我有這個 df
| 一個 | 乙 |
|---|---|
| 111 | 4 |
| 111 | 4 |
| 112 | 0 |
| 112 | 2 |
| 113 | 3 |
| 113 | 3 |
| 114 | 楠 |
| 114 | 1 |
我想用 col B 中的其他值替換 col A 中相應專案的 nan 和 0 值,如下所示:
| 一個 | 乙 |
|---|---|
| 111 | 4 |
| 111 | 4 |
| 112 | 2 |
| 112 | 2 |
| 113 | 3 |
| 113 | 3 |
| 114 | 1 |
| 114 | 1 |
我試過了,但這沒有回傳正確的值
df['B'].fillna(0)
df=df.merge(df[B > 0].groupby('$LINK:NO').size().reset_index(name='B'), on='A')
uj5u.com熱心網友回復:
替換小于或等于0缺失值的值Series.where,因此可以通過以下方式獲得每組的第一個非缺失GroupBy.transform值GroupBy.first:
df['B'] = (df.assign(new = df['B'].where(df['B'].gt(0)))
.groupby('A')['new']
.transform('first'))
print (df)
A B
0 111 4.0
1 111 4.0
2 112 2.0
3 112 2.0
4 113 3.0
5 113 3.0
6 114 1.0
7 114 1.0
另一個想法是排序使用max:
df['B'] = df.sort_values('B').groupby('A').transform('max')
print (df)
A B
0 111 4.0
1 111 4.0
2 112 2.0
3 112 2.0
4 113 3.0
5 113 3.0
6 114 1.0
7 114 1.0
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/488332.html
