繁体   English   中英

pandas:使用与另一个 df 中的索引和列匹配的值填充 df 列

[英]pandas: populate df column with values matching index and column in another df

我面临一个我无法找到解决方法的问题。

我也发现很难解释我想要做什么,希望一个小例子会有所帮助

我有df1这样的:

Id   product_1   product_2  
Date
1    0.1855672   0.8855672
2    0.1356667   0.0356667 
3    1.1336686   1.7336686  
4    0.9566671   0.6566671  

我有df2这样的:

                            product_1    Month
Date                                          
2018-03-30                         11.0      3
2018-04-30                         18.0      4
2019-01-29                         14.0      1
2019-02-28                         22.0      2

我想要实现的是df2

                            product_1    Month   seasonal_index  
Date                                          
2018-03-30                         11.0       3        1.1336686 
2018-04-30                         18.0       4        0.9566671
2019-01-29                         14.0       1        0.1855672
2019-02-28                         22.0       2        0.1356667

因此,我尝试将df2中的产品名称与d1中的相应列进行匹配,然后获取与df2中月份编号匹配的每个索引值的值,我尝试过执行以下操作:

for i in df1:
    df2['seasonal_index'] = df1.loc[df1.iloc[:,i] == df2['Month']]

但没有成功。 希望有人能对如何解除封锁有线索

你是我的朋友,这会产生你指定的 output。

import pandas as pd

# replicate df1
data1 = [[0.1855672, 0.8855672],
         [0.1356667, 0.0356667],
         [1.1336686, 1.7336686],
         [0.9566671, 0.6566671]]
index1 = [1, 2, 3, 4]
df = pd.DataFrame(data=data1,
                  index= index1,
                  columns=['product_1', 'product_2'])
df.columns.name = 'Id'
df.index.name = 'Date'

# replicate df2
data2 = [[11.0, 3],
         [18.0, 4],
         [14.0, 1],
         [22.0, 2]]
index2 = [pd.Timestamp('2018-03-30'),
          pd.Timestamp('2018-04-30'),
          pd.Timestamp('2019-01-29'),
          pd.Timestamp('2019-02-28')]
df2 = pd.DataFrame(data=data2, index=index2,
                   columns=['product_1', 'Month'])
df2.index.name = 'Date'

# Merge your data
df3 = pd.merge(left=df2, right=df[['product_1']],
               left_on='Month',
               right_index=True,
               how='outer',
               suffixes=('', '_df2'))
df3 = df3.rename(columns={'product_1_df2': 'seasonal_index'})
print(df3)

如果您有兴趣了解其工作原理,请查看解释pandas.merge function 的链接。 请特别注意,对于您的数据帧,df2 的键是它的列之一(因此我们在 pd.merge 中使用 left_on 参数),df 的键是它的索引(因此我们在 pd.merge 中使用 right_index 参数)。

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.merge.html

暂无
暂无

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

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