繁体   English   中英

如何根据条件在具有多索引的 DataFrame 中更改列内的值

[英]How to change values within a column, based on a condition, in a DataFrame with multi-index

我当前的 DF 看起来像:

                            column 1   column 2   column 3
      user_id      date
       5678     2022-01-01    0.0        1.5          0.0
       6253     2022-01-14    0.0        NaN          2.0

我的 DF 有很多行,我需要根据 user_id 是否在名为“用户”的特定集合中更改第 2 列的值。

我正在使用以下代码,但它似乎不起作用。

我的代码:

for idx, row in df.iterrows():
  if idx[0] in users:
    row['column 2'] = 0  

当我检查“用户”集中存在的特定 user_id 时,它显示为“NaN”。 这是否意味着代码无效? 如果 user_id 存在于用户集中,我需要第 2 列的所有值都为零。

先感谢您。

df.loc[df.index.get_level_values("user_id").isin(users), "column 2"] = 0

你不需要循环! 你可以

  • 获取索引中的 user_id 级别值
  • 检查其中哪些在预定义的“用户”集中
  • 使用该 boolean 掩码作为索引器,将感兴趣的列“第 2 列”用作第 1
    • 然后.loc将进行设置

这是我解决这个问题的方法:

for user in users:
    if user in df.index.get_level_values(level='user_id'):
        df['column 2'].loc[user,:] = 0

循环将检查每个用户。 如果他们在 dataframe 的索引中,它将为该用户更改第 2 列中的值。 (loc 在这里工作)

这也可能有效:

for user in users:
    if user in df.index.get_level_values(0):
        df['column 2'].loc[user,:] = 0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM