首页 > 解决方案 > Python Pandas - groupby 以另一个数据框为条件

问题描述

我有两个数据框,它们的大小(行/日期索引和列/公司)相同。我现在要做的是根据 Dataframe2 中包含的逻辑计算 Dataframe1 中观察的时间序列统计信息。例如,我想根据排名(Dataframe2)计算时间序列平均观察值(Dataframe1)

所以某种分组程序除了我使用第二个数据框作为条件之外。

很高兴有任何输入,因为我找不到类似的问题!

Dataframe1
----------------------------------
            A      B      C      D      E      F       G      H             
31.12.2009  30     66     NaN    NaN    NaN    NaN     393    57     
01.01.2010  30     66     NaN    NaN    NaN    NaN     393    57   
04.01.2010  31     66     NaN    NaN    NaN    NaN     404    57     
05.01.2010  33     66     NaN    NaN    NaN    NaN     400    58    
06.01.2010  33     66     NaN    NaN    NaN    NaN     400    58   


Dataframe2
----------------------------------
            A      B      C      D      E      F       G      H            
31.12.2009  1.0    2.0    NaN    NaN    NaN    NaN     2.0    1.0     
01.01.2010  1.0    2.0    NaN    NaN    NaN    NaN     2.0    1.0   
04.01.2010  1.0    1.0    NaN    NaN    NaN    NaN     2.0    2.0     
05.01.2010  1.0    2.0    NaN    NaN    NaN    NaN     1.0    2.0    
06.01.2010  2.0    2.0    NaN    NaN    NaN    NaN     1.0    1.0  


Desired output
----------------------------------
            1.0     2.0            
31.12.2009  43.5    229.5     
01.01.2010  43.5    229.5   
04.01.2010  48.5    230.5       
05.01.2010  216.5   62.0        
06.01.2010  229.0   49.5     

标签: pythonpandasdataframe

解决方案


您可以使用字典理解来创建结果数据框。 当在 中不满足特定值时,每列都是使用nanwhere替换值来生成的,以便能够对的每个值使用overaxis=1df1df2meanuniquedf2

df_res = pd.DataFrame({col: df1.where(df2.eq(col)).mean(1) for col in df2.stack().unique()})
print (df_res)
              1.0    2.0
31.12.2009   43.5  229.5
01.01.2010   43.5  229.5
04.01.2010   48.5  230.5
05.01.2010  216.5   62.0
06.01.2010  229.0   49.5

推荐阅读