numpy 如何将pandas dataframe中的行替换为同一dataframe中的其他行?

cetgtptt  于 2023-10-19  发布在  其他
关注(0)|答案(1)|浏览(86)

我有一个pandas框架(my_df),看起来像这样:
| 指数|事件编号|记录编号|对话码|天气|
| --|--|--|--|--|
| 99378 | 11 ||||
| 99379 | 11 | 11 |P1|明确|
| 99380 | 11 ||||
| 99381 | 4 | 4 |P2|雨|
| 99382 | 37 | 37 |Q4|风|
| 99383 | 39 | 39 |Q5|雪|
| 99384 | 4 ||||
我需要在列recording_numsession_codeweather中填充空值,以获得最终结果:
| 指数|事件编号|记录编号|对话码|天气|
| --|--|--|--|--|
| 99378 | 11 | 11 |P1|明确|
| 99379 | 11 | 11 |P1|明确|
| 99380 | 11 | 11 |P1|明确|
| 99381 | 4 | 4 |P2|雨|
| 99382 | 37 | 37 |Q4|风|
| 99383 | 39 | 39 |Q5|雪|
| 99384 | 4 | 4 |P2|雨|
构造my_df框架的代码:

import numpy as np
import pandas as pd

data = {
    'index': np.arange(99378, 99385), 
    'event_num': [11, 11, 11, 4, 37, 39, 4],
    'recording_num': [np.nan, 11, np.nan, 4, 37, 39, np.nan], 
    'session_code': [np.nan, 'P1', np.nan, 'P2', 'Q4', 'Q5', np.nan], 
    'weather': [np.nan, 'clear', np.nan, 'rain', 'wind', 'snow', np.nan]
}
my_df = pd.DataFrame(data)

我试过my_df.ffill(axis = 0),但它不工作,因为ffill采取了前一个观察,这对最后一行不起作用。

krcsximq

krcsximq1#

使用groupbyfillna

>>> my_df.fillna(my_df.groupby("event_num")[["recording_num","session_code","weather"]].ffill().bfill())

   index  event_num  recording_num session_code weather
0  99378         11           11.0           P1   clear
1  99379         11           11.0           P1   clear
2  99380         11           11.0           P1   clear
3  99381          4            4.0           P2    rain
4  99382         37           37.0           Q4    wind
5  99383         39           39.0           Q5    snow
6  99384          4            4.0           P2    rain

相关问题