Python 基于不带for循环的条件更新数据帧值
我想知道如何在不使用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
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 = 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