使用 groupby 根据条件填充下一行/上一行
Fill next / Previous row based on condition using groupby
我想用以前的值和 return 数据框为每个主题填充 Visit 和 X1 中的空单元格。
Subject Visit X1 X2
A aaa 164 16
A creamy 167 168
A
B yyy 173 176
B ice cream 1760 178
B 1788
B ccc 17 17
C cream 1788 1789
C doo 1789 179
输出就像:
Subject Visit X1 X2
A aaa 164 16
A creamy 167 168
A creamy 167
B yyy 173 176
B ice cream 1760 178
B ice cream 1760 1788
B ccc 17 17
C cream 1788 1789
C doo 1789 179
我试过了:
df.fillna(method='ffill')
但它不工作并且不 return 数据框。
fillna()
未到位
df = df.fillna(method='ffill')
# or
df.fillna(method='ffill', inplace=True)
# or
df = df.ffill()
# or
df.ffill(inplace=True)
你需要 groupby
和 ffill
:
In [2960]: df = df.replace('', np.nan)
In [2963]: df[['Visit', 'X1']] = df.groupby('Subject')[['Visit', 'X1']].ffill()
In [2964]: df
Out[2964]:
Subject Visit X1 X2
0 A aaa 164.0 16.0
1 A creamy 167.0 168.0
2 A creamy 167.0 NaN
3 B yyy 173.0 176.0
4 B ice_cream 1760.0 178.0
5 B ice_cream 1760.0 1788.0
6 B ccc 17.0 17.0
7 C cream 1788.0 1789.0
8 C doo 1789.0 179.0
我想用以前的值和 return 数据框为每个主题填充 Visit 和 X1 中的空单元格。
Subject Visit X1 X2
A aaa 164 16
A creamy 167 168
A
B yyy 173 176
B ice cream 1760 178
B 1788
B ccc 17 17
C cream 1788 1789
C doo 1789 179
输出就像:
Subject Visit X1 X2
A aaa 164 16
A creamy 167 168
A creamy 167
B yyy 173 176
B ice cream 1760 178
B ice cream 1760 1788
B ccc 17 17
C cream 1788 1789
C doo 1789 179
我试过了:
df.fillna(method='ffill')
但它不工作并且不 return 数据框。
fillna()
未到位
df = df.fillna(method='ffill')
# or
df.fillna(method='ffill', inplace=True)
# or
df = df.ffill()
# or
df.ffill(inplace=True)
你需要 groupby
和 ffill
:
In [2960]: df = df.replace('', np.nan)
In [2963]: df[['Visit', 'X1']] = df.groupby('Subject')[['Visit', 'X1']].ffill()
In [2964]: df
Out[2964]:
Subject Visit X1 X2
0 A aaa 164.0 16.0
1 A creamy 167.0 168.0
2 A creamy 167.0 NaN
3 B yyy 173.0 176.0
4 B ice_cream 1760.0 178.0
5 B ice_cream 1760.0 1788.0
6 B ccc 17.0 17.0
7 C cream 1788.0 1789.0
8 C doo 1789.0 179.0