Python 在组中填充以前的值

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

我希望在'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      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”不见了。知道为什么吗?嗨,我已经更新了密码。我真的不知道为什么它不见了