dataframe数据框.pivot_table 和 groupby 区别
时间: 2024-05-31 17:08:37 浏览: 199
pandas中的`pivot_table()`和`groupby()`方法都是用于对数据进行聚合操作的方法,但它们的实现方式和应用场景略有不同。
`pivot_table()`方法是一种类似于Excel中数据透视表的操作,可以根据某些列对数据进行重塑和聚合,同时可以指定聚合函数。`pivot_table()`方法的主要应用场景是在已经有一个DataFrame数据框的情况下,对数据进行重塑和聚合,生成新的DataFrame数据框。
`groupby()`方法则是先根据某些列进行分组,然后对每个分组进行聚合操作。`groupby()`方法的主要应用场景是在原始数据中,根据某些列进行分组,然后对每个分组进行聚合操作,生成新的Series或DataFrame数据框。
因此,`pivot_table()`方法更适合用于已经有一个DataFrame数据框,需要对数据进行重塑和聚合的情况,而`groupby()`方法更适合用于原始数据需要进行分组和聚合的情况。
相关问题
d2.pivot_table
D2是一个数据处理库,它主要用于Pandas DataFrame操作,`pivot_table`函数是其内建的一个非常强大的工具,用于创建数据透视表。数据透视表允许你将数据按照指定的列分组,并计算每个组内的聚合值,比如求和、平均值、计数等。通过这个函数,你可以方便地对数据进行汇总分析,快速生成交叉表格。
使用`pivot_table`的基本语法通常是这样的:
```python
pivot_table = df.pivot_table(values=column_to_aggregate,
index=index_column,
columns=column_to_group_by,
aggfunc=aggregation_function)
```
其中:
- `values`: 需要聚合的数值列。
- `index` 和 `columns`: 分别指定了行索引和列标签,决定了数据如何被分组。
- `aggfunc`: 聚合函数,如`sum`, `mean`, `count`, 等。
举个例子,如果你有一个销售数据集,想按产品类别统计每个月的总销售额,可以这样做:
```python
sales_pivot = sales_df.pivot_table(index='Month', columns='Product Category', values='Sales Amount', aggfunc='sum')
```
# 用户在多少商家领取并消费优惠券 pivot = pd.pivot_table(data[data['Date'].notnull()&data['Date_received'].notnull()][['User_id', 'Merchant_id']], index=keys1, values='Merchant_id', aggfunc=lambda x:len(set(x))) pivot = pd.DataFrame(pivot).rename(columns={'Merchant_id':prefixs + 'received_consume_differ_merchant'}).reset_index() feature_user = pd.merge(feature_user, pivot, on=keys1, how='left') # 用户对不同商家领取优惠券的核销率(领券消费数/领券数) feature_user[prefixs+'received_consume_merchant_rate'] = feature_user[prefixs + 'received_consume_differ_merchant'].astype('float')/feature_user[prefixs + 'received_differ_merchant'].astype('float') # 用户15天内消费优惠券数量 pivot = pd.pivot_table(data[data['label']==1][['User_id', 'cnt']], index=keys1, values='cnt', aggfunc=len) pivot = pd.DataFrame(pivot).rename(columns={'cnt': prefixs+'15_consume_cnt'}).reset_index() feature_user = pd.merge(feature_user, pivot, on=keys1, how='left') # 用户15天内未消费优惠券数量 pivot = pd.pivot_table(data[data['label']==0][['User_id', 'cnt']], index=keys1, values='cnt', aggfunc=len) pivot = pd.DataFrame(pivot).rename(columns={'cnt': prefixs+'15_not_consume_cnt'}).reset_index() feature_user = pd.merge(feature_user, pivot, on=keys1, how='left')用groupby(函数改写)
# 用户在多少商家领取并消费优惠券
pivot = data[data['Date'].notnull() & data['Date_received'].notnull()][['User_id', 'Merchant_id']].groupby(keys1)['Merchant_id'].nunique().reset_index()
pivot = pivot.rename(columns={'Merchant_id': prefixs + 'received_consume_differ_merchant'})
feature_user = pd.merge(feature_user, pivot, on=keys1, how='left')
# 用户对不同商家领取优惠券的核销率(领券消费数/领券数)
feature_user[prefixs + 'received_consume_merchant_rate'] = feature_user[prefixs + 'received_consume_differ_merchant'].astype('float') / feature_user[prefixs + 'received_differ_merchant'].astype('float')
# 用户15天内消费优惠券数量
pivot = data[data['label'] == 1][['User_id', 'cnt']].groupby(keys1)['cnt'].count().reset_index()
pivot = pivot.rename(columns={'cnt': prefixs+'15_consume_cnt'})
feature_user = pd.merge(feature_user, pivot, on=keys1, how='left')
# 用户15天内未消费优惠券数量
pivot = data[data['label'] == 0][['User_id', 'cnt']].groupby(keys1)['cnt'].count().reset_index()
pivot = pivot.rename(columns={'cnt': prefixs+'15_not_consume_cnt'})
feature_user = pd.merge(feature_user, pivot, on=keys1, how='left')
阅读全文