首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python Pandas - groupby条件另一个数据帧

Python Pandas - groupby条件另一个数据帧
EN

Stack Overflow用户
提问于 2019-10-22 22:46:31
回答 2查看 67关注 0票数 0

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

因此,除了我使用第二个数据帧作为条件之外,这是一种groupby过程。

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

代码语言:javascript
复制
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     
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-22 23:04:15

一次处理一个值:

(1)

代码语言:javascript
复制
df1.where(df2 == 1).mean(axis=1)

输出:

代码语言:javascript
复制
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)

代码语言:javascript
复制
df1.where(df2 == 2).mean(axis=1)

输出:

代码语言:javascript
复制
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

组合成你想要的输出:

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2019-10-22 22:56:31

您可以使用字典理解来创建结果数据帧。当df1中的特定值不满足df2中的特定值时,将使用where生成每一列,以将df2中的值替换为nan,以便能够对df2的每个unique值使用mean over axis=1

代码语言:javascript
复制
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
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58506871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档