我有两个数据帧,它们在大小上是相同的(行/日期索引和列/公司)。我现在要做的是根据Dataframe2中包含的逻辑计算Dataframe1中观测值的时间序列统计信息。例如,我想要基于等级(Dataframe2)计算时间序列平均观察值(Dataframe1)
因此,除了我使用第二个数据帧作为条件之外,这是一种groupby过程。
很高兴有任何输入,因为我不能找到类似的问题!
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     发布于 2019-10-22 23:04:15
一次处理一个值:
(1)
df1.where(df2 == 1).mean(axis=1)输出:
31.12.2009     43.5
01.01.2010     43.5
04.01.2010     48.5
05.01.2010    216.5
06.01.2010    229.0(2)
df1.where(df2 == 2).mean(axis=1)输出:
31.12.2009    229.5
01.01.2010    229.5
04.01.2010    230.5
05.01.2010     62.0
06.01.2010     49.5组合成你想要的输出:
output = pd.DataFrame({'1':df1.where(df2 == 1).mean(axis=1),
                       '2':df1.where(df2 == 2).mean(axis=1)})
                1      2
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发布于 2019-10-22 22:56:31
您可以使用字典理解来创建结果数据帧。当df1中的特定值不满足df2中的特定值时,将使用where生成每一列,以将df2中的值替换为nan,以便能够对df2的每个unique值使用mean over axis=1
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.5https://stackoverflow.com/questions/58506871
复制相似问题