如何从 pandas 中每组的完整行中替换不完整的行
How to replace incomplete rows from complete rows per group in pandas
尝试清理数据集时,我怀疑我正在处理数据框中其他地方包含正确信息的不完整行。例如,
ride_id
start_station_name
start_lat
start_lng
12398213
Clark & Vermont
85.56
40.34
12398129
NaN
85.56
40.34
这只是许多这样的情况之一(对于多个站点)。好奇你们如何使用 start_lat
和 start_lng
.
搜索数据框,将“NaN”替换为“Clark and Vermont”
Group by the latitude and longitude, then forward-fill and backward-fill站名。
使用稍大的数据框进行演示:
df = pd.DataFrame({'ride_id': range(100, 105), 'station_name': ['Clark & Vermont', np.nan, np.nan, 'Foo & Bar', np.nan], 'start_lat': [85.56]*2 + [15.59]*3, 'start_lng': [40.34]*2 + [20.30]*3})
# ride_id station_name start_lat start_lng
# 0 100 Clark & Vermont 85.56 40.34
# 1 101 NaN 85.56 40.34
# 2 102 NaN 15.59 20.30
# 3 103 Foo & Bar 15.59 20.30
# 4 104 NaN 15.59 20.30
输出:
df['station_name'] = df.groupby(['start_lat', 'start_lng'])['station_name'].ffill().bfill()
# ride_id station_name start_lat start_lng
# 0 100 Clark & Vermont 85.56 40.34
# 1 101 Clark & Vermont 85.56 40.34
# 2 102 Foo & Bar 15.59 20.30
# 3 103 Foo & Bar 15.59 20.30
# 4 104 Foo & Bar 15.59 20.30
尝试清理数据集时,我怀疑我正在处理数据框中其他地方包含正确信息的不完整行。例如,
ride_id | start_station_name | start_lat | start_lng |
---|---|---|---|
12398213 | Clark & Vermont | 85.56 | 40.34 |
12398129 | NaN | 85.56 | 40.34 |
这只是许多这样的情况之一(对于多个站点)。好奇你们如何使用 start_lat
和 start_lng
.
Group by the latitude and longitude, then forward-fill and backward-fill站名。
使用稍大的数据框进行演示:
df = pd.DataFrame({'ride_id': range(100, 105), 'station_name': ['Clark & Vermont', np.nan, np.nan, 'Foo & Bar', np.nan], 'start_lat': [85.56]*2 + [15.59]*3, 'start_lng': [40.34]*2 + [20.30]*3})
# ride_id station_name start_lat start_lng
# 0 100 Clark & Vermont 85.56 40.34
# 1 101 NaN 85.56 40.34
# 2 102 NaN 15.59 20.30
# 3 103 Foo & Bar 15.59 20.30
# 4 104 NaN 15.59 20.30
输出:
df['station_name'] = df.groupby(['start_lat', 'start_lng'])['station_name'].ffill().bfill()
# ride_id station_name start_lat start_lng
# 0 100 Clark & Vermont 85.56 40.34
# 1 101 Clark & Vermont 85.56 40.34
# 2 102 Foo & Bar 15.59 20.30
# 3 103 Foo & Bar 15.59 20.30
# 4 104 Foo & Bar 15.59 20.30