python-3.x - 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']
解决方案
尝试这个
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"])
推荐阅读
- c# - 尝试嵌套 foreach 循环中的 catch 块不返回正确的输出,c#
- sql-server - 计算运行总余额
- apache-kafka - Kafka - 消费者视角 - “承诺”消息解释
- java - 尝试在控制器初始化时获取 StageTitle 时获取 NullPointerException
- java - HTTP 请求可能返回两种结构的对象
- perl - 如何在 Perl 哈希中找到值?
- javascript - 如何正确传播 2 个数组,覆盖与对象 ID 匹配的旧值
- grails - 正确处理 IDoc 错误?
- c# - 如何在 Unity UI 中将自定义函数分配为参数?
- neo4j - Graphenedb 上的 Neo4j 如何提高 Cypher SPEED 以及 Normailzing 在 Graphenedb 上的含义