我目前有以下维基百科scraper:
import wikipedia as wp
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# Wikipedia __scraper__
wiki_page = 'Climate_of_Italy'
html = wp.page(wiki_page).html().replace(u'\u2212', '-')
def dataframe_cleaning(table_number: int):
global html
df = pd.read_html(html, encoding='utf-8')[table_number]
df.drop(np.arange(5, len(df.index)), inplace=True)
df.columns = df.columns.droplevel()
df.drop('Year', axis=1, inplace=True)
find = '\((.*?)\)'
for i, column in enumerate(df.columns):
if i>0:
df[column] = (df[column]
.str.findall(find)
.map(lambda x: np.round((float(x[0])-32)* (5/9), 2)))
return df
potenza_df = dataframe_cleaning(3)
milan_df = dataframe_cleaning(4)
florence_df = dataframe_cleaning(6)
italy_df = pd.concat((potenza_df, milan_df, florence_df))
产生以下数据帧:
如您所见,我连接了 DataFrame,这导致了许多重复的行。使用 groupby
我想将所有这些过滤到单个 DataFrame 中并使用 .agg
方法我想确保有 min
、max
、{ {1}}。我面临的问题是无法逐行应用 mean
方法。我知道这是一个非常简单的问题,但我一直在查看文档,遗憾的是无法弄清楚。
提前感谢您的帮助。
附言抱歉,如果这是一个重复的问题帖子,但我找不到类似的解决方案。
编辑:
添加了所需的输出(注意:是在 excel 上完成的)
答案 0 :(得分:0)
只是一个快速的更新,我能够实现我想要的目标,但是我无法找到一个好的解决方案。
concat_df = pd.concat((potenza_df, milan_df, florence_df))
italy_df = pd.DataFrame()
for i, index in enumerate(list(set(concat_df['Month']))):
if i == 0:
temp_df = concat_df[concat_df['Month'] == index]
temp_df = temp_df.groupby('Month').agg(np.max)
if i in range(1, 4):
temp_df = concat_df[concat_df['Month'] == index]
temp_df = temp_df.groupby('Month').agg(np.mean)
if i == 4:
temp_df = concat_df[concat_df['Month'] == index]
temp_df = temp_df.groupby('Month').agg(np.min)
italy_df = italy_df.append(temp_df)
italy_df = italy_df.apply(lambda x: np.round(x, 2))
italy_df