簡體   English   中英

使用Pandas在具有匹配列數據的Excel工作表中平均數據

[英]Using Pandas to average data across excel sheets with matching column data

數據片段

請參閱數據代碼段。 我在Excel中的多個工作表上有類似的數據,每個工作表都是不同的年份。 對於每個月,日和時間(12和00),我想在所有工作表中取K列的平均值。 但是,每張紙的數據行數並不相同。 我想在所有工作表中取K的平均值,但前提是A,B,E,G列中的數據都在工作表中匹配。 因此,從數據示例中,我將獲得所有工作表的平均值K2,其中每個工作表月份= 1,日期= 1,時間= am,mb = 100。

在沒有您的數據的情況下,我制作了兩個示例DataFrames

首先,您需要將excel中的數據導入到pandas中:

df1 = pd.read_excel('name_file.xlsx', sheet_name='year2018')

每年這樣做。

之后,您可以使用我的示例來獲得預期的輸出:

# 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將數據幀附加在一起(在您的情況下,這些數據幀可以多於兩個)。

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來獲得預期的輸出:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM