简体   繁体   English

根据列值将数据添加到数据框中

[英]Add data to data frame depending on column value

I have a data frame that looks similar to this:我有一个看起来与此类似的数据框:

df = 

col_name1    col_name2    data_march    data_april    data_may
--------------------------------------------------------------
tony         stark        5.5           5.9           6.1
bucky        barnes       4.5           5.0           5.7
steve        rogers       3.1           4.5           9.1
sam          wilson       5.6           3.3           2.1

I then do some analysis where I get a bunch of tuples looking similar to this:然后我做了一些分析,我得到一堆看起来类似于这样的元组:

new_data = [(tony, stark, 6.5), (steve, rogers, 6.0), (sam, wilson, 1.5)]

As can be seen here the new_data doesn't contain anything about bucky barnes , however I would still like the resulting data frame to be like:从这里可以看出, new_data不包含任何关于bucky barnes的内容,但是我仍然希望生成的数据框如下所示:

df = 

col_name1    col_name2    data_march    data_april    data_may    data_june
---------------------------------------------------------------------------
tony         stark        5.5           5.9           6.1         6.5
bucky        barnes       4.5           5.0           5.7
steve        rogers       3.1           4.5           9.1         6.0
sam          wilson       5.6           3.3           2.1         1.5

I know in advance that this is june data, so adding the date in the last column would just be something like:我事先知道这是june的数据,因此在最后一列中添加日期将类似于:

month = 'june'
df[f'data_{month}'] = [x[2] for x in new_data]

However, this will not fix the "missing" values from bucky barnes .但是,这不会修复bucky barnes的“缺失”值。

you can create a new dataframe then do a left merge.您可以创建一个新的 dataframe 然后进行左合并。

new_df = pd.DataFrame(new_data,columns=['col_name1','col_name2','data_june'])
# using fillna('') will cause a numeric column to become an object column.
df_merge = pd.merge(df,new_df,on=['col_name1','col_name2'],how='left').fillna('')


  col_name1 col_name2  data_march  data_april  data_may data_june
0      tony     stark         5.5         5.9       6.1       6.5
1     bucky    barnes         4.5         5.0       5.7          
2     steve    rogers         3.1         4.5       9.1         6
3       sam    wilson         5.6         3.3       2.1       1.5

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM