这是一个更大数据的例子。假设我有一个这样的 Dataframe :
df = pd.DataFrame({"CLASS":["AG_1","AG_2","AG_3","MAR","GOM"],
"TOP":[200, np.nan, np.nan, 600, np.nan],
"BOT":[230, 250, 380, np.nan, 640]})
df
Out[49]:
CLASS TOP BOT
0 AG_1 200.0 230.0
1 AG_2 NaN 250.0
2 AG_3 NaN 380.0
3 MAR 600.0 NaN
4 GOM NaN 640.0
我想在第1行和第2行设置TOP的值。我的条件是,如果类以相同的子字符串"AG"开头,则这些值必须是上一行的BOT值。输出应如下所示:
CLASS TOP BOT
0 AG_1 200.0 230.0
1 AG_2 230.0 250.0
2 AG_3 250.0 380.0
3 MAR 600.0 NaN
4 GOM NaN 640.0
有人能教我怎么做吗?
1条答案
按热度按时间mzsu5hc01#
一般情况:填充所有组
我将使用
fillna
和groupby.shift
,使用自定义组从带有str.extract
的CLASS中提取子字符串:输出量:
中间体
group
:特殊情况:仅AG组
示例: