如何从带复选框的Pandas DataFrame中获取选中行的id列值?
如何从带复选框的Pandas DataFrame中获取选中行的id列值?
看起来你已经在尝试处理带复选框的DataFrame了,不过在获取选中行的id值时走了点弯路,我来帮你调整下代码逻辑~
首先,你当前的代码里,row = df.loc[df["Delete"]] != df.loc[df["Delete"]].empty这行逻辑是有问题的,完全没必要这么写,反而会导致你拿到的不是想要的结果。咱们直接简化步骤:
正确的处理步骤
- 先筛选出所有被选中的行
因为你的复选框列是Delete,被选中的行该列值会是True,所以直接用这个条件筛选:selected_rows = df.loc[df["Delete"] == True] - 判断是否有选中的行
替换你原来的判断逻辑,这样更清晰:if not selected_rows.empty: - 获取id列的值
- 如果你一次只会选中一行,想要单个id值,直接用
iloc[0]取第一行的id:entryid = selected_rows['id'].iloc[0] - 如果允许选中多行,想要所有选中的id组成的列表,就用
tolist():entryid_list = selected_rows['id'].tolist()
- 如果你一次只会选中一行,想要单个id值,直接用
修正后的完整代码片段
df = pagination.data_editor(data=pages[current_page - 1], use_container_width=True, disabled=['Date','Day','Project','Task','StartTime','EndTime','Note','Total_Hours'], column_order=['Date','Day','Project','Task','StartTime','EndTime','Total_Hours','Note','Delete','Edit'], column_config=config, key='edit_df') # 筛选选中的行 selected_rows = df.loc[df["Delete"] == True] if not selected_rows.empty: # 单个id值(单选场景) entryid = selected_rows['id'].iloc[0] # 或者多行选中时的id列表 # entryid_list = selected_rows['id'].tolist()
小提醒
要确保你的Delete列是布尔类型(True/False),Streamlit的data_editor里的复选框组件默认返回的就是布尔值,所以一般不用额外处理,但如果遇到异常情况,可以先确认下该列的数据类型哦。
备注:内容来源于stack exchange,提问作者Gurusewak
相关产品推荐
相关产品推荐

