基于Python中的另一列更新列的值
我有一个数据帧作为df: 现在,基于第一列['Message']上的字符串处理函数,test(l1,l2)得到一个类似dict的rect_d{}:基于Python中的另一列更新列的值,python,pandas,dataframe,dictionary,search,Python,Pandas,Dataframe,Dictionary,Search,我有一个数据帧作为df: 现在,基于第一列['Message']上的字符串处理函数,test(l1,l2)得到一个类似dict的rect_d{}: {'ISIN': ':', 'ISIN :': 'KE5000008986', 'SETTLEMENT DATE': '-', 'SETTLEMENT DATE -': '06/01/2020', 'TRADE DATE': '-'} 基于dict的值,我打算更新不同列上同一行的类似信息,比如基于结算日期的最后一个值,我想更新同一行上的结
{'ISIN': ':',
'ISIN :': 'KE5000008986',
'SETTLEMENT DATE': '-',
'SETTLEMENT DATE -': '06/01/2020',
'TRADE DATE': '-'}
基于dict的值,我打算更新不同列上同一行的类似信息,比如基于结算日期的最后一个值,我想更新同一行上的结算日期
我已经相应地编写了代码:
for idx, row in df.iterrows():
split_t=df['Message'][idx].split()
ret_d= test(items, split_t)
for key in ret_d:
print(key)
if key=='SETTLEMENT DATE' or 'SETTLEMENT DATE:' or 'Settlement date :' or 'SETTLEMENT DATE -':
df.loc[idx,'SETTLEMENT DATE']=ret_d[key]
elif key=='ISIN:' or 'ISIN' or 'ISIN :':
df.loc[idx,'ISIN']=ret_d[key]
elif key=='CASH ACCOUNT':
df.loc[idx,'CASH ACCOUNT']=ret_d[key]
else: print('done')
break
理想情况下,应该用这些值填充我的df。但它并不是只填充第一个值。
我不能这么做,因为价值观不是那么直接:
df['key']=df['rect_d'].apply(lambda x:rect_d[x])
在更新df的过程中,我遗漏了什么吗?任何见解都将受到高度赞赏
以df.to_dict()格式引用的df:
项目:
items=['SETTLEMENT DATE', 'SETTLEMENT DATE:','Settlement date :','SETTLEMENT DATE -', 'CASH ACCOUNT', 'CASH ACCOUNT:',
'ISIN:', 'ISIN', 'ISIN :',
'TRADE DATE','TRADE DATE:']
我们可以通过迭代消息列中的字符串并使用test
函数将每个字符串映射到dictionary
来创建记录,然后我们可以从这些记录创建新的数据帧,并从新创建的数据帧更新原始数据帧中的值
df.update(pd.DataFrame([test(items, msg.split()) for msg in df['Message']], index=df.index))
请以文本形式发布您的数据帧值,以便我们可以在我们的系统上创建/测试它,谢谢。@RavinderSingh13已用相同的格式更新。@Strayhorn什么是
项?@ShubhamSharma已更新。感谢您的回复,我不认为这样可以在新创建的df中正确填充值。我认为缺少条件检查,它只在三列上填充“-”,在其他列上没有填充任何内容。@Strayhorn请检查编辑,我认为只要您的函数test
以正确的格式返回包含所有键的字典(列名
),就应该可以工作这需要更新。@jezrael我肯定会投票支持重新开放。
df.update(pd.DataFrame([test(items, msg.split()) for msg in df['Message']], index=df.index))