python – 如何加快数据帧搜索和分配值?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 如何加快数据帧搜索和分配值?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1993字,纯文字阅读大概需要3分钟。
内容图文
参见英文答案 > Merge and update dataframes based on a subset of their columns 3个
例如,我有两个数据帧
DF1:
0 1 2 3
0 Name Unit Attribute Date
1 a A xxy xxx
2 b B xyx xxx
3 c C xxx xxx
4 d D yxx xxx
5 e E yxy yyy
DF2:
0 1 2
Name Unit Date
0 a F xxx
1 b G xxx
2 e H xxx
3 f I xxx
我想用df2中的相应条目覆盖df1中的条目.
例如,用df2.loc [2,2]覆盖df1.loc [5,3].也就是说,对于具有相同“名称”的行,如果它在df2中,则覆盖df1的相同列.
目前,我是以一种愚蠢的方式做到这一点:
def find_column_num(key, df_name, start_row, stop_row, start_column, stop_column):
for i in range(start_row,stop_row+1):
for j in range(start_column, stop_column+1):
if df_name.loc[i,j]== key:
column_num_with_key = j
return column_num_with_key
break
for i in range(0,len(df1.index)):
for ii in range(0,len(df2.index)):
if df1.loc[i,0] == df2.loc[ii,0]:
for j in range(0,len(df1.columns)):
if df1.loc[0,j] in df2.loc[0,:]:
df1.set_value(i,j, df2.loc[ii,find_column_num(df1.loc[0,j],df2,0,0,0,len(df2.columns))]
我并不为此感到骄傲.我做了一些研究,并提出用set_value()替换’=’,这有帮助.我真的很期待听到其他建议.实际问题的大小是200行和30列.因此,遍历所有for循环需要20秒.
解决方法:
IIUC,使用merge和fillna.您需要稍微清理一下数据.这是我用来参考的.
df1
Name Unit Attribute Date
0 a A xxy xxx
1 b B xyx xxx
2 d C xxx xxx
3 e D yxx xxx
4 e E yxy xxx
df2
Name Unit Date
0 a F xxx
1 b G xxx
2 e H xxx
3 f H xxx
out = df1[['Name', 'Attribute']].merge(df2, how='left').fillna(df1)
out
Name Attribute Unit Date
0 a xxy F xxx
1 b xyx G xxx
2 d xxx C xxx
3 e yxx H xxx
4 e yxy H xxx
内容总结
以上是互联网集市为您收集整理的python – 如何加快数据帧搜索和分配值?全部内容,希望文章能够帮你解决python – 如何加快数据帧搜索和分配值?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。