Python 基于不带for循环的条件更新数据帧值

Python 基于不带for循环的条件更新数据帧值,python,pandas,dataframe,Python,Pandas,Dataframe,我想知道如何在不使用for的情况下执行下面的代码 values = [11,20,23,30,32,35,60...] for new_value in range(10,10000,10): if new_value not in values: df.at[new_value, 'a2'] = new_value 我想做的是: 我有两个列表:值和新值 如果新_值中的元素不在值中,则更新df,其中新_值同时为索引和更新值 谢谢 编辑: df看起来像: df = p

我想知道如何在不使用for的情况下执行下面的代码

values = [11,20,23,30,32,35,60...]
for new_value in range(10,10000,10):
    if new_value not in values:
        df.at[new_value, 'a2'] = new_value
我想做的是:

  • 我有两个列表:值和新值
  • 如果新_值中的元素不在值中,则更新df,其中新_值同时为索引和更新值
谢谢

编辑:

df看起来像:

df = pd.DataFrame(index=range(10,1000,10), columns=['a1','a2','a3'])

尝试从索引和数据相同的
值创建一个数据框,此新数据框与原始数据框一起使用,用于仅获取每个id组的第一行,然后按以下顺序清理:

将熊猫作为pd导入
df=pd.DataFrame(索引=范围(10100,10),列=['a1','a2','a3'])
值=[11,20,23,30,32,35,60]
#将列表转换为索引和值相同的数据帧
values\u df=pd.DataFrame(数据=值,索引=值,列=['a2'])
#从df和值创建新的数据帧
新值=pd.concat((df,值)
#按索引分组,只保留每组中的第一个
#(不使用first(),因为它会覆盖NAN)
new_df=new_df.groupby(new_df.index).head(1.sort_index)()
#展示
打印(新文档)
来源(
df
):

输出(
new_df
):


你想要这样的吗

mask = (~df.index.isin(values))
df.loc[mask, 'a2'] = df.loc[mask].index

你能出示你的df吗?我已经更新了问题
     a1   a2   a3
10  NaN  NaN  NaN
11  NaN   11  NaN
20  NaN  NaN  NaN
23  NaN   23  NaN
30  NaN  NaN  NaN
32  NaN   32  NaN
35  NaN   35  NaN
40  NaN  NaN  NaN
50  NaN  NaN  NaN
60  NaN  NaN  NaN
70  NaN  NaN  NaN
80  NaN  NaN  NaN
90  NaN  NaN  NaN
mask = (~df.index.isin(values))
df.loc[mask, 'a2'] = df.loc[mask].index