猿问

python pandas 用最大值填充 NaN 或毯子

我有一个大数据框的问题。这是一个小片段。我想用最大值填充最后一列 E,如果有一些值或让它为空。那就是数据:


d = {'A': [4000074, 4000074, 4000074, 4000074, 4000074, 4000074, 4000074, 4000074, 4000074,

   4000074, 4000074, 4000074, 4000074, 4000074, 4000074, 4000074, 4000074, 4000074],

 'B': ['SP000796746', 'SP000796746', 'SP000796746', 'SP000796746', 'SP000796746','SP000796746',

   'SP000796746', 'SP000796746', 'SP000796746', 'SP000796746', 'SP000796746', 'SP000796746', 

   'SP000796746', 'SP000796746', 'SP000796746', 'SP000796746', 'SP000796746', 'SP000796746'],

 'C': [201926, 201926, 201926, 201926, 201926, 201926, 201909,201909, 201909, 201909, 201909, 

   201909, 201933, 201933, 201933, 201933, 201933, 201933],

 'D': [-1, 0, 1, 2, 3, 4, -1, 0, 1, 2, 3, 4, -1, 0, 1, 2, 3, 4], 

 'E': [np.nan, 1000, 1000, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, 3000, 3000, np.nan]}

它看起来像这样:


       A            B       C     D       E

0   4000074  SP000796746  201926 -1     NaN

1   4000074  SP000796746  201926  0  1000.0

2   4000074  SP000796746  201926  1  1000.0

3   4000074  SP000796746  201926  2     NaN

4   4000074  SP000796746  201926  3     NaN

5   4000074  SP000796746  201926  4     NaN

6   4000074  SP000796746  201909 -1     NaN

7   4000074  SP000796746  201909  0     NaN

8   4000074  SP000796746  201909  1     NaN

9   4000074  SP000796746  201909  2     NaN

10  4000074  SP000796746  201909  3     NaN

11  4000074  SP000796746  201909  4     NaN

12  4000074  SP000796746  201933 -1     NaN

13  4000074  SP000796746  201933  0     NaN

14  4000074  SP000796746  201933  1     NaN

15  4000074  SP000796746  201933  2  3000.0

16  4000074  SP000796746  201933  3  3000.0

17  4000074  SP000796746  201933  4     NaN


慕无忌1623718
浏览 146回答 1
1回答

料青山看我应如是

您可以使用D 列中的新 -1 和 中的组groupby.transform来完成。然后是原来的专栏。maxcumsumfillnadf['E'] = df['E'].fillna(df['E'].groupby(df['D'].eq(-1).cumsum()).transform('max'))编辑:用零填充,你可以这样做:mask = df['E'].groupby(df['D'].eq(-1).cumsum()).transform('any')df.loc[mask, 'E'] = df.loc[mask, 'E'].fillna(0)
随时随地看视频慕课网APP

相关分类

Python
我要回答