首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Pandas对具有匹配列数据的excel工作表中的数据进行平均

使用Pandas对具有匹配列数据的excel工作表中的数据进行平均
EN

Stack Overflow用户
提问于 2019-03-22 23:24:24
回答 1查看 848关注 0票数 0

请参阅数据片段。我在Excel中的多个工作表中有类似的数据,每个工作表是不同的年份。对于每个月、日和时间(12和00),我希望在所有工作表上取K列的平均值。但是,每个工作表的数据行数并不相同。我想要取所有工作表的K的平均值,但前提是A、B、E、G列中的数据都与工作表中的数据匹配。因此,从数据示例中,我将获得每个表中的month=1、date=1、time=am和mb=100中所有表的K2的平均值。

EN

回答 1

Stack Overflow用户

发布于 2019-03-22 23:43:59

在没有你的数据的情况下,我做了两个DataFrames示例

首先,您需要使用以下命令将数据从excel导入pandas

代码语言:javascript
运行
复制
df1 = pd.read_excel('name_file.xlsx', sheet_name='year2018')

每年都要这样做。

之后,您可以使用我的示例来获得预期的输出:

代码语言:javascript
运行
复制
# Example dataframe 1
print(df1)

   Month  Date  Year Time   mb  dir
0      1     1  2018   AM  100  265
1      1     1  2018   AM  150  265
2      1     1  2018   AM  200  270
3      1     1  2018   AM  250  270
4      1     1  2018   PM  100  265
5      1     1  2018   PM  150  265
6      1     1  2018   PM  200  265
7      1     1  2018   PM  250  265

#Example dataframe2
print(df2)

   Month  Date  Year Time   mb  dir
0      1     1  2019   AM  100  275
1      1     1  2019   AM  150  275
2      1     1  2019   AM  200  280
3      1     1  2019   AM  250  280
4      1     1  2019   PM  100  275
5      1     1  2019   PM  150  275
6      1     1  2019   PM  200  275
7      1     1  2019   PM  250  280

我们可以使用pandas.concat将数据帧附加在一起(在您的示例中,这些数据帧可以超过两个)。

代码语言:javascript
运行
复制
df_all = pd.concat([df1, df2], ignore_index=True)
print(df_all)

    Month  Date  Year Time   mb  dir
0       1     1  2018   AM  100  265
1       1     1  2018   AM  150  265
2       1     1  2018   AM  200  270
3       1     1  2018   AM  250  270
4       1     1  2018   PM  100  265
5       1     1  2018   PM  150  265
6       1     1  2018   PM  200  265
7       1     1  2018   PM  250  265
8       1     1  2019   AM  100  275
9       1     1  2019   AM  150  275
10      1     1  2019   AM  200  280
11      1     1  2019   AM  250  280
12      1     1  2019   PM  100  275
13      1     1  2019   PM  150  275
14      1     1  2019   PM  200  275
15      1     1  2019   PM  250  280

现在,我们可以使用pandas.Groupby.Series.mean来获得您预期的输出:

代码语言:javascript
运行
复制
print(df_all.groupby(['Month', 'Date', 'Time', 'mb']).dir.mean().reset_index())

   Month  Date Time   mb    dir
0      1     1   AM  100  270.0
1      1     1   AM  150  270.0
2      1     1   AM  200  275.0
3      1     1   AM  250  275.0
4      1     1   PM  100  270.0
5      1     1   PM  150  270.0
6      1     1   PM  200  270.0
7      1     1   PM  250  272.5
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55302897

复制
相关文章

相似问题

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