Jon*_*nts 23 python pivot-table dataframe pandas
我偶然发现了大熊猫,它看起来很适合我想做的简单计算.我有一个SAS背景,并且认为它取代了proc freq - 看起来它将扩展到我将来可能要做的事情.不过,我只是似乎无法让我的头围绕一个简单的任务(我不知道如果我应该来看看pivot/crosstab/indexing-我是否应该有一个Panel或DataFrames等...).有人可以给我一些关于如何做以下事项的指示:
我有两个CSV文件(一个用于2010年,一个用于2011年 - 简单的事务数据) - 列是类别和金额
2010:
AB,100.00
AB,200.00
AC,150.00
AD,500.00
Run Code Online (Sandbox Code Playgroud)
2011:
AB,500.00
AC,250.00
AX,900.00
Run Code Online (Sandbox Code Playgroud)
它们被加载到单独的DataFrame对象中.
我想做的是获取类别,类别的总和以及类别的频率,例如:
2010:
AB,300.00,2
AC,150.00,1
AD,500.00,1
Run Code Online (Sandbox Code Playgroud)
2011:
AB,500.00,1
AC,250.00,1
AX,900.00,1
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚我是否应该使用pivot/crosstab/groupby/an index
等...我可以得到总和或频率 - 我似乎无法得到两者......它变得有点复杂,因为我想这样做一个月一个月,但我想如果有人会如此友好地指出我正确的技术/方向,我将能够从那里去.
Wes*_*ney 16
v0.21回答
pivot_table与index参数一起使用:
df.pivot_table(index='category', aggfunc=[len, sum])
len sum
value value
category
AB 2 300
AC 1 150
AD 1 500
Run Code Online (Sandbox Code Playgroud)
<= v0.12
pivot_table对于那些感兴趣的人,可以这样做:
In [8]: df
Out[8]:
category value
0 AB 100
1 AB 200
2 AC 150
3 AD 500
In [9]: df.pivot_table(rows='category', aggfunc=[len, np.sum])
Out[9]:
len sum
value value
category
AB 2 300
AC 1 150
AD 1 500
Run Code Online (Sandbox Code Playgroud)
请注意,结果的列是分层索引的.如果您有多个数据列,您将得到如下结果:
In [12]: df
Out[12]:
category value value2
0 AB 100 5
1 AB 200 5
2 AC 150 5
3 AD 500 5
In [13]: df.pivot_table(rows='category', aggfunc=[len, np.sum])
Out[13]:
len sum
value value2 value value2
category
AB 2 2 300 10
AC 1 1 150 5
AD 1 1 500 5
Run Code Online (Sandbox Code Playgroud)
使用__builtin__.sumvs.的主要原因np.sum是你从后者获得NA处理.可能会拦截内置的Python,现在就会对此做一个说明.
Jef*_*her 12
假设您有一个名为2010.csv的文件,其中包含内容
category,value
AB,100.00
AB,200.00
AC,150.00
AD,500.00
Run Code Online (Sandbox Code Playgroud)
然后,使用在groupby之后应用多个聚合函数的功能,您可以说:
import pandas
data_2010 = pandas.read_csv("/path/to/2010.csv")
data_2010.groupby("category").agg([len, sum])
Run Code Online (Sandbox Code Playgroud)
你应该得到一个类似的结果
value
len sum
category
AB 2 300
AC 1 150
AD 1 500
Run Code Online (Sandbox Code Playgroud)
请注意,Wes可能会指出sum已经过优化,你应该使用np.sum.
| 归档时间: |
|
| 查看次数: |
14845 次 |
| 最近记录: |