首页 > 解决方案 > Python DataFrame - 根据条件从另一列更新一个数据框列

问题描述

我正在参加一项数据科学竞赛,并遇到了一个问题,我必须根据另一个数据帧的某些条件更新原始数据帧中的值。我厌倦了一些代码,但没有运气。下面是详细...

感谢任何建议。

询问是:如果 new_df 中的 CNT 超过 200,则将“FIELD_1”列更新为 2;当 CNT >100 且 <200 时为 1;当 CNT <100 时为 0。

代码 :

df = pd.DataFrame({'FIELD_1': ['f710fca39', '1fd0233cd', '005dd4ce3', '5331f98fb', '005dd4ce3', 'f710fca39', 'eb0004a0b'], 
                         'B': [400        , 500        , 600        , 700        , 800        , 900        , 111]})
new_df = pd.DataFrame({'CNT': [225, 150, 80, 230],'ID': ['f710fca39', '1fd0233cd', '5331f98fb', '005dd4ce3']})
new_df.set_index('ID', inplace=  True)
print(df)
print(new_df)
#df.loc[df['FIELD_1'].isin(new_df.index ),'FIELD_1']

标签: python-3.xpandasdataframe

解决方案


尝试这个

import pandas as pd
import numpy as np
df = pd.DataFrame({'FIELD_1': ['f710fca39', '1fd0233cd', '005dd4ce3', '5331f98fb', '005dd4ce3', 'f710fca39', 'eb0004a0b'], 
                         'B': [400        , 500        , 600        , 700        , 800        , 900        , 111]})
new_df = pd.DataFrame({'CNT': [225, 150, 80, 230],
                       'ID': ['f710fca39', '1fd0233cd', '5331f98fb', '005dd4ce3']})

df_ = df.copy()
df_=df_.rename(columns={"FIELD_1":"ID"})
mer = pd.merge(df_,new_df,how="left",on=["ID"])
def f(x):
    if pd.isnull(x):
        return np.nan
    elif x>200:
        return 1
    elif x<100:
        return 0
    else:
        return 2
mer["FIELD_1"]= mer.CNT.apply(lambda x: f(x))
mer=mer.drop(columns=["ID","CNT"])

推荐阅读