主要想做的事情用大白话来讲就是:一个dataframe里面对于两个列做分组,最后算一个value对应于这两个列的分组来算值的矩阵,这个矩阵的行为其中一个列,列也为其中一个列。
新建一个df
import pandas as pd
import numpy as np
v = [1, 2, 3, 3, 3]
a = pd.DataFrame({'v': v})
d = [2 , 4, 4, 5, 4]
a['d'] = d
c = ['c' , 'h', 'd', 'e', 'c']
a['c'] = c
df用两列进行分组grouby
a.groupby(['v', 'd'])['c'].count()
我的要干的事情 就是把这个v当作列index,d当作行columns,之后把对应的分组的’c‘.count()放到对应的索引loc处,不存在的值用0填补。
最后得到一个以v为index, d为column的df,也可以搞成对应的矩阵matrix
第一种方法:pd.crosstab
cpd = pd.crosstab(a['v'], a['d'], a['c'], aggfunc='count')
查看index和columns
我们再来一步就可以得到我们想要的了,把nan填充一下。
cpd = cpd.fillna(0)
转换为array和list的方法
cpd_arr1 = np.array(cpd)
cpd_arr2 = np.array(cpd.values.tolist())
cpd_arr3 = cpd.as_matrix()
cpd_list = cpd.values.tolist()
cpd = pd.crosstab(a['v'], a['d'], a['c'], aggfunc='count')
cpd = cpd.fillna(0)
cpd_arr = np.array(cpd)
cpd_arr
总结一句话
np.array(pd.crosstab(a['v'], a['d'], a['c'], aggfunc='count').fillna(0))
第二种方法:pivot()
groupby的as_index=False
a.groupby(['v', 'd'], as_index=False)['c'].count()
把操作的三列的值恢复到df上,每一个列还是对应的列。
pivot
a.groupby(['v', 'd'], as_index=False)['c'].count().pivot('v', 'd', 'c')
对应关系如下:
ppd = a.groupby(['v', 'd'], as_index=False)['c'].count().pivot('v', 'd', 'c')
ppd = ppd.fillna(0)
ppd_arr = np.array(ppd)
ppd_arr
总结一句话
np.array(a.groupby(['v', 'd'], as_index=False)['c'].count().pivot('v', 'd', 'c').fillna(0))
第三种方法:pivot_table
pivoted_df=pd.pivot_table(a[['v','d','c']],
values='c', index=['v'],
columns=['d'], aggfunc='count')
pivoted_df
往期精彩回顾
前言主要想做的事情用大白话来讲就是:一个dataframe里面对于两个列做分组,最后算一个value对应于这两个列的分组来算值的矩阵,这个矩阵的行为其中一个列,列也为其中一个列。新建一个...
pd.pivot_table(data,index=None,columns=None,
values=None,aggfunc=‘mean’,
margins=False,margins_name=‘All’,
dropna=True,fill_value=None)
2)对比excel,说明上
对于数据透视表,相信对于 Excel 比较熟悉的小伙伴都知道如何使用它,并了解它的强大之处,而在pandas中要实现数据透视就要用到pivot_table了。导入示例数据首先导入演示的数据集。importpandasaspd
df=pd.read_csv('销售目标.csv')
df.head()参数说明主要参数:data:待操作的 DataFramevalu...
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('score(1).csv',header=None)
data_original = {'algorithm':df.iloc[1:,1].values,'target':df.iloc[1:,2].values,'number':df.iloc[1:,3].values}
data_original = pd.DataFrame(data_orig
3.10 数据透视表
数据透视表(pivot table) 是一种类似GroupBy的操作方法,常见于Excel中。数据透视表将每一列数据作为输入,输出将数据不断细分为多个维度累计信息的二维数据表。
3.10.1 演示数据透视表
示例将采用泰坦尼克号的乘客信息数据库来演示,可以在Seaborn程序库获取:
In [1]: import numpy as np
import pandas...
在Python中,可以使用pandas库来进行数据透视表的操作。下面是一个简单的示例代码:
假设有一个名为"sales_data.csv"的销售数据表格,其中包含了销售日期、销售员、产品类型、销售数量和销售金额等字段。现在我们需要使用数据透视表来统计每个销售员每种产品类型的销售数量和销售金额总和。
```python
import pandas as pd
# 读取数据文件
sales_data = pd.read_csv("sales_data.csv")
# 使用pandas的pivot_table函数进行数据透视表操作
pivot_data = pd.pivot_table(sales_data,
index=["Salesperson"],
columns=["Product Type"],
values=["Sales Quantity", "Sales Amount"],
aggfunc={"Sales Quantity": sum, "Sales Amount": sum})
# 打印结果
print(pivot_data)
解释一下上面的代码:
1. 第一行导入了pandas库,用于数据操作。
2. 第三行使用pandas的read_csv函数读取数据文件。
3. 第五行使用pandas的pivot_table函数进行数据透视表操作。其中,index参数指定行索引为销售员,columns参数指定列索引为产品类型,values参数指定统计字段为销售数量和销售金额,aggfunc参数指定统计函数为sum(即求和)。
4. 最后一行将结果打印出来。
执行上面的代码后,将输出一个类似下面的数据透视表:
Sales Amount Sales Quantity
Product Type Product A Product B Product C Product A Product B Product C
Salesperson
Alice 2000.0 3000.0 4000.0 20 30 40
Bob 2500.0 3500.0 4500.0 25 35 45
Charlie 3000.0 4000.0 5000.0 30 40 50