- 积分
- 4041
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2021-3-11
- 最后登录
- 1970-1-1
|
发表于 2022-5-25 21:13:48
|
显示全部楼层
请问一下大佬,如果我用groupby把类似楼主的这种资料聚合成以站点为第一元组的数据,下一步怎么分开并分别写入txt呢
代码如下
import pandas as pd
from glob import glob
import numpy as np
files = glob(r'G:\data\data-fengsu\2010*.txt')
def read_data(f):
return pd.read_csv(f,skiprows=1,delimiter='\s+',usecols = [0,1,2,3,4,5,6,7],
na_values = 999998).rename(columns={'Mon':'month'})
from joblib import Parallel,delayed
df = Parallel(n_jobs=-1)(delayed(read_data)(i) for i in files)
df = pd.concat(df)
df.loc[:,'Time'] = pd.to_datetime(df[['Year','month','Day','Hour']])
df = df.set_index(['Time'])
dff = df[['Station_Id_C','Lon','Lat','WIN_D_Avg_2mi']]
dff.loc[:,'WIN_D_Avg_2mi'] = np.where(np.isnan(dff['WIN_D_Avg_2mi']), 0, 1)
group = dff.groupby(by=['Station_Id_C']) # 将上述代码输入ipython后,会得到一个DataFrameGroupBy对象
df_station = list(dff.groupby(by=['Station_Id_C']))
# 转换成list的形式来看 每个元组中,第一个元素是组别(这里是按照站名进行分组)
# 第二个元素的是对应组别下的DataFrame
# 总结来说,groupby的过程就是将原有的DataFrame按照groupby的字段(这里是站名),
# 划分为若干个分组DataFrame,被分为多少个组就有多少个分组DataFrame。
# 所以说,在groupby之后的一系列操作(如agg、apply等),均是基于子DataFrame的操作。
# 理解了这点,也就基本摸清了Pandas中groupby操作的主要原理。
# 求不同站点缺失数据总数
# dff.groupby(by=['Station_Id_C']).agg('sum')
# 如果想对针对不同的列求不同的值,
# 比如要计算不同Station_Id_C的平均以及中位数,
# 可以利用字典进行聚合操作的指定:
# data.groupby('Station_Id_C'').agg({'x':'median','y':'mean'})
dff.groupby(by=['Station_Id_C']).agg({'WIN_D_Avg_2mi':'sum',})
df_station 输出是这样的
[('52323',
Station_Id_C Lon Lat WIN_D_Avg_2mi
Time
2010-03-01 00:00:00 52323 97.0333 41.8 1
2010-03-01 01:00:00 52323 97.0333 41.8 1
2010-03-01 02:00:00 52323 97.0333 41.8 1
2010-03-01 03:00:00 52323 97.0333 41.8 1
2010-03-01 04:00:00 52323 97.0333 41.8 1
... ... ... ... ...
2010-03-31 19:00:00 52323 97.0333 41.8 1
2010-03-31 20:00:00 52323 97.0333 41.8 1
2010-03-31 21:00:00 52323 97.0333 41.8 1
2010-03-31 22:00:00 52323 97.0333 41.8 1
2010-03-31 23:00:00 52323 97.0333 41.8 1
[744 rows x 4 columns]), |
|