我有两个数据框,它们的大小相同(行/日期索引和列/校验)。我现在要做的是根据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
答案 0 :(得分:4)
您可以使用字典理解来创建结果数据框。每列都是使用where
替换df1
中的值生成的
如果在df2
中未满足特定值,请使用nan编写,以便能够对每个df2
的每个mean
值使用unique
在轴= 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.5
答案 1 :(得分:0)
一次执行每个值:
(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