Python 在组中填充以前的值
我希望在'ID'组内的Python 在组中填充以前的值,python,pandas,dataframe,Python,Pandas,Dataframe,我希望在'ID'组内的S0.0、S1.0、S2.0中的ffill()中设置值 ID Close S0.0 S1.0 S2.0 0 UNITY 11.66 NaN 54 NaN 1 UNITY 11.55 56 NaN NaN 2 UNITY 11.59 NaN NaN 78 3 TRINITY 11.69 47 NaN NaN 4 TRIN
S0.0、S1.0、S2.0中的ffill()
中设置值
ID Close S0.0 S1.0 S2.0
0 UNITY 11.66 NaN 54 NaN
1 UNITY 11.55 56 NaN NaN
2 UNITY 11.59 NaN NaN 78
3 TRINITY 11.69 47 NaN NaN
4 TRINITY 11.37 NaN 69 NaN
5 TRINITY 11.89 NaN NaN 70
预期结果:
ID Close S0.0 S1.0 S2.0
0 UNITY 11.66 NaN 54 NaN
1 UNITY 11.55 56 54 NaN
2 UNITY 11.59 56 54 78
3 TRINITY 11.69 47 NaN NaN
4 TRINITY 11.37 47 69 NaN
5 TRINITY 11.89 47 69 70
以下是我的尝试及其不希望的结果:
尝试1:
df[df['S0.0']==""] = np.NaN
df[df['S1.0']==""] = np.NaN
df[df['S2.0']==""] = np.NaN
df['S0.0'].groupby('ID').fillna(method='ffill', inplace = True)
df['S1.0'].groupby('ID').fillna(method='ffill', inplace = True)
df['S2.0'].groupby('ID').fillna(method='ffill', inplace = True)
输出:
raise KeyError(gpr)
KeyError: 'ID'
尝试2:
df.groupby('ID')[['S0.0', 'S1.0', 'S2.0']].ffill()
#this makes no difference to the data.
#but when I try this:
df = df.groupby('ID')[['S0.0', 'S1.0', 'S2.0']].ffill()
df
输出:
S0.0 S1.0 S2.0
NaN 54 NaN
56 54 NaN
56 54 78
47 NaN NaN
47 69 NaN
47 69 70
这也不是我想要的。很少的帮助将被感激。
谢谢 只要做:
df[['S0.0', 'S1.0', 'S2.0']] = df.groupby('ID')[['S0.0', 'S1.0', 'S2.0']].ffill()
print(df)
输出
Close S0.0 S1.0 S2.0
0 11.66 NaN 54.0 NaN
1 11.55 56.0 54.0 NaN
2 11.59 56.0 54.0 78.0
3 11.69 47.0 NaN NaN
4 11.37 47.0 69.0 NaN
5 11.89 47.0 69.0 70.0
只要做:
df[['S0.0', 'S1.0', 'S2.0']] = df.groupby('ID')[['S0.0', 'S1.0', 'S2.0']].ffill()
print(df)
输出
Close S0.0 S1.0 S2.0
0 11.66 NaN 54.0 NaN
1 11.55 56.0 54.0 NaN
2 11.59 56.0 54.0 78.0
3 11.69 47.0 NaN NaN
4 11.37 47.0 69.0 NaN
5 11.89 47.0 69.0 70.0
更新
第二次尝试是正确的!只是不要指定Sx.0的列
id = df.ID
df = pd.concat([id,df.groupby('ID').ffill()],axis=1)
输出:
ID Close S0.0 S1.0 S2.0
0 UNITY 11.66 NaN 54.0 NaN
1 UNITY 11.55 56.0 54.0 NaN
2 UNITY 11.59 56.0 54.0 78.0
3 TRINITY 11.69 47.0 NaN NaN
4 TRINITY 11.37 47.0 69.0 NaN
5 TRINITY 11.89 47.0 69.0 70.0
更新
第二次尝试是正确的!只是不要指定Sx.0的列
id = df.ID
df = pd.concat([id,df.groupby('ID').ffill()],axis=1)
输出:
ID Close S0.0 S1.0 S2.0
0 UNITY 11.66 NaN 54.0 NaN
1 UNITY 11.55 56.0 54.0 NaN
2 UNITY 11.59 56.0 54.0 78.0
3 TRINITY 11.69 47.0 NaN NaN
4 TRINITY 11.37 47.0 69.0 NaN
5 TRINITY 11.89 47.0 69.0 70.0
嘿,谢谢你的回答。但请注意,“ID”不见了。知道为什么吗?嗨,我已经更新了密码。我不知道为什么它会丢失嘿,谢谢你的回答。但请注意,“ID”不见了。知道为什么吗?嗨,我已经更新了密码。我真的不知道为什么它不见了