更新dataframe列中的信息

2024-07-08 08:02:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个经过筛选的数据集,new_df,如下所示

    Label  New_Label    Username    Look_up
59  1.0    True         vald21      val
67  1.0    True         2512        2512
75  1.0    True         Christine   Chris

创建它是为了在满足某些条件时分配新标签(New_Label)。我还有另一个数据集(df),它包含所有数据(该数据集是上面的数据提取的地方),但没有关于New_Label的信息(因为上面的数据集是基于特定条件过滤而创建的)

        Label   Username    Look_up
    59  1.0     vald21      val
    67  1.0     2512        2512
    67  0.0     faehr6542   faehr
...
    75  1.0     Christine   Chris
   122  0.0     starogm     starogm

我想将Label从我的原始数据集df更改为new_df中的那些行,如果大小写标签和新的_标签不匹配

        Label   Username    Look_up
    59  0       vald21      val
    67  0       2512        2512
    67  0       faehr6542   faehr
...
    75  0       Christine   Chris
   122  0     starogm     starogm

其中new_df中的True对应于0,而False对应于Label列中的1。我不想更改其他值,只想更改new_df数据集中的那些值(我的键是Username)

请您解释一下,如何更改原始数据集中的信息

谢谢


Tags: 数据truedfnewusernameval标签label
2条回答

如果我正确理解您的问题,您希望翻转'New_Label',将其转换为int并将其分配给'Label'

new_df['Label'] = (new_df['New_Label']==False).astype(int) 

您可以尝试合并两个数据帧,然后使用.assignnp.where。与outer合并时,不存在的值将具有NA,因此可以使用np.wherenotnull()

pd.merge(df, new_df, how='outer').assign(Label = lambda row:np.where(row['New_Label'].notnull(), 0, 1))

如果不需要New_Label,可以使用.drop('New_Label', axis=1)删除列。如下所示(如果写在一行中):

pd.merge(df, new_df, how='outer').assign( Label = lambda row:  np.where(row['New_Label'].notnull(), 0, 1)).drop('New_Label', axis=1)

相关问题 更多 >

    热门问题