目录
一. Group操作:数据聚合
1.1 生成DataFrame
import numpy as np
import pandas as pd
period = pd.date_range('2017-1-1', periods=10000, freq='D') # 从20170101往后的10000天的day时间序列
df = pd.DataFrame(np.random.randn(10000, 4),
columns=['Data1', 'Data2', 'Data3', 'Data4'],
index = period)
1.2 新增一例用于Group操作
df['group1'] = np.random.choice(['A', 'B', 'C', 'D'], 10000)
增加一列group1,1000行,等概率的随机从ABCD中选择一个。
1.3 生成DataFrameGroupBy对象
grouped = df.groupby('group1') #df.groupby();必背;
grouped.size() #每组元素数量
1.4 Group对象的聚合运算
grouped.sum()
grouped.max()
grouped.mean() 均值
grouped.describe() #整体数据特征概览;
np.transpose(grouped.describe() ) # 转置
1.5 选择Group对象中的数据
grouped.get_group('A').head()
1.6 双重Group
df['group2'] = np.random.choice(['Python','C++','Java'], 10000)
grouped = df.groupby(['group1', 'group2'])
grouped.size() #多组分类
grouped.agg([np.max, np.sum]) #自定义聚合.分类汇总、查看,可以自定义聚合;
也可以:
grouped.agg({'Data1':np.mean, 'Data2':np.max})
二. Concat
pd.concat(objs,
axis=0,
join='outer',
join_axes=None,
ignore_index=False,
keys=None,
levels=None,
names=None,
verify_integrity=False,
copy=True)
objs 需要连接的对象,eg [df1, df2]
axis axis = 0, 表示在水平方向(row)进行连接 axis = 1, 表示在垂直方向(column)进行连接
join outer, 表示index全部需要; inner,表示只取index重合的部分
join_axes 传入需要保留的index
ignore_index 忽略需要连接的frame本身的index。当原本的index没有特别意义的时候可以使用
keys 可以给每个需要连接的df一个标签
三、Join
DataFrame.join(other, on=None, how='left', lsuffix='', rsuffix='', sort=False)
on 在实际应用中如果右表的索引值正是左表的某一列的值,这时可以通过将右表的索引和左表的列对齐合并。
栗子:
In [59]: left = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3'],
'key': ['K0', 'K1', 'K0', 'K1']})
In [60]: right = pd.DataFrame({'C': ['C0', 'C1'],
'D': ['D0', 'D1']},
index=['K0', 'K1'])
In [61]: result = left.join(right, on='key')
how join中的how参数和merge中的how参数一样 可选:left(向左取交集)、right(向右取交集)、inner(取交集)、outer(取并集)
lsuffix rsuffix 左右后缀参数:如果和表合并的过程中遇到有一列两个表都同名,但是值不同,合并的时候又都想保留下来,就可以用suffixes给每个表的重复列名增加后缀。
四、Merge
pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None,
left_index=False, right_index=False, sort=True,
suffixes=('_x', '_y'), copy=True, indicator=False,
validate=None)
left: 拼接的左侧DataFrame对象
right: 拼接的右侧DataFrame对象
on: 在实际应用中如果右表的索引值正是左表的某一列的值,这时可以通过将右表的索引和左表的列对齐合并。(和join的on一样)
left_on 和 right_on: 两张DataFrame列名是不同的,但是表示是同一个的意思且按left_on = right_on拼接; 一般2个参数同时使用。
left_index 和 right_index: 当2个dataframe的index一样。就可以通过left_index,right_index进行按index索引拼接
how: 可选:left(向左取交集)、right(向右取交集)、inner(取交集)、outer(取并集)
sort: 按字典顺序通过连接键对结果DataFrame进行排序。 默认为True,设置为False将在很多情况下显着提高性能。
suffixes: 用于重叠列的字符串后缀元组。 默认为(‘x’,’ y’)。
copy: 始终从传递的DataFrame对象复制数据(默认为True),即使不需要重建索引也是如此。
indicator:将一列添加到名为_merge的输出DataFrame,其中包含有关每行源的信息。 _merge是分类类型,并且对于其合并键仅出现在“左”DataFrame中的观察值,取得值为left_only,对于其合并键仅出现在“右”DataFrame中的观察值为right_only,并且如果在两者中都找到观察点的合并键,则为left_only。