标签: pandas-groupby

在组内使用 pandas.shift()

我有一个包含面板数据的数据框,假设它是 100 个不同对象的时间序列:

object  period  value 
1       1       24
1       2       67
...
1       1000    56
2       1       59
2       2       46
...
2       1000    64
3       1       54
...
100     1       451
100     2       153
...
100     1000    21
Run Code Online (Sandbox Code Playgroud)

我想添加一个新列prev_value,它将value为每个对象存储以前的内容:

object  period  value  prev_value
1       1       24     nan
1       2       67     24
...
1       99      445    1243
1       1000    56     445
2       1       59     nan
2       2       46     59
...
2       1000    64     784
3 …
Run Code Online (Sandbox Code Playgroud)

python pandas pandas-groupby

33
推荐指数
2
解决办法
3万
查看次数

dplyr总结了熊猫中的等价物

我曾经和R一起工作,真的很喜欢你可以轻松分组并总结的dplyr软件包.

但是,在pandas中,我没有看到相当的总结,这是我在Python中实现它的方式:

import pandas as pd
data = pd.DataFrame(
    {'col1':[1,1,1,1,1,2,2,2,2,2],
    'col2':[1,2,3,4,5,6,7,8,9,0],
     'col3':[-1,-2,-3,-4,-5,-6,-7,-8,-9,0]
    }
)
result = []
for k,v in data.groupby('col1'):
    result.append([k, max(v['col2']), min(v['col3'])])
print pd.DataFrame(result, columns=['col1', 'col2_agg', 'col3_agg'])
Run Code Online (Sandbox Code Playgroud)

它不仅非常冗长,而且可能不是最优化和最有效的.(我曾经重写过一个dplyr实现for-loop groupby,性能提升很大).

在R中代码将是

data %>% groupby(col1) %>% summarize(col2_agg=max(col2), col3_agg=min(col3))
Run Code Online (Sandbox Code Playgroud)

在Python或for循环中是否有一个有效的等价物是我必须使用的.


另外,@ ahan真的给了我答案的解决方案,这是一个后续问题,我将在这里列出而不是评论:

什么是相当于 groupby.agg

python r pandas summarize pandas-groupby

32
推荐指数
2
解决办法
1万
查看次数

pandas agg和apply函数有什么区别?

我无法弄清楚Pandas .aggregate.apply功能之间的区别.
以下面的例子为例:我加载一个数据集,做一个groupby,定义一个简单的函数,以及用户.agg.apply.

正如您所看到的,使用.agg和后,我的函数中的打印语句会产生相同的输出.apply.结果,另一方面是不同的.这是为什么?

import pandas
import pandas as pd
iris = pd.read_csv('iris.csv')
by_species = iris.groupby('Species')
def f(x):
    ...:     print type(x)
    ...:     print x.head(3)
    ...:     return 1
Run Code Online (Sandbox Code Playgroud)

使用apply:

by_species.apply(f)
#<class 'pandas.core.frame.DataFrame'>
#   Sepal.Length  Sepal.Width  Petal.Length  Petal.Width Species
#0           5.1          3.5           1.4          0.2  setosa
#1           4.9          3.0           1.4          0.2  setosa
#2           4.7          3.2           1.3          0.2  setosa
#<class 'pandas.core.frame.DataFrame'>
#   Sepal.Length  Sepal.Width  Petal.Length  Petal.Width Species
#0           5.1 …
Run Code Online (Sandbox Code Playgroud)

python pandas pandas-groupby

28
推荐指数
2
解决办法
2万
查看次数

熊猫:在groupby之后对每组进行抽样

我知道这肯定已经回答了一些地方,但我找不到它.

问题:在groupby操作后对每个组进行采样.

import pandas as pd

df = pd.DataFrame({'a': [1,2,3,4,5,6,7],
                   'b': [1,1,1,0,0,0,0]})

grouped = df.groupby('b')

# now sample from each group, e.g., I want 30% of each group
Run Code Online (Sandbox Code Playgroud)

python random group-by pandas pandas-groupby

27
推荐指数
2
解决办法
1万
查看次数

Pandas groupby与bin计数

我有一个看起来像这样的DataFrame:

+----------+---------+-------+
| username | post_id | views |
+----------+---------+-------+
| john     |       1 |     3 |
| john     |       2 |    23 |
| john     |       3 |    44 |
| john     |       4 |    82 |
| jane     |       7 |     5 |
| jane     |       8 |    25 |
| jane     |       9 |    46 |
| jane     |      10 |    56 |
+----------+---------+-------+
Run Code Online (Sandbox Code Playgroud)

我想将它转换为计算属于某些二进制文件的视图:

+------+------+-------+-------+--------+
|      | 1-10 | 11-25 | 25-50 | 51-100 |
+------+------+-------+-------+--------+ …
Run Code Online (Sandbox Code Playgroud)

python dataframe pandas pandas-groupby

26
推荐指数
1
解决办法
2万
查看次数

Python Pandas Group使用datetime数据按日期

我有一个列Date_Time,我希望按日期时间分组而不创建新列.这可能是我当前的代码不起作用.

df = pd.groupby(df,by=[df['Date_Time'].date()])
Run Code Online (Sandbox Code Playgroud)

python datetime dataframe pandas pandas-groupby

25
推荐指数
3
解决办法
4万
查看次数

使用Pandas groupby()+ apply()和参数

我想df.groupby()结合使用apply()将函数应用于每组的每一行.

我通常使用以下代码,这通常有效(请注意,这是没有的groupby()):

df.apply(myFunction, args=(arg1,))
Run Code Online (Sandbox Code Playgroud)

随着groupby()我尝试了以下内容:

df.groupby('columnName').apply(myFunction, args=(arg1,))
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误:

TypeError:myFunction()得到一个意外的关键字参数'args'

因此,我的问题是:我如何使用groupby()apply()需要参数的函数?

python apply dataframe pandas pandas-groupby

23
推荐指数
3
解决办法
2万
查看次数

与熊猫groupby的Boxplot

好吧,我有一个数据框,其中包含时间序列数据,每个列都有一个多行索引.以下是数据外观的示例,它采用csv格式.加载数据不是问题.

在此输入图像描述

我想要做的是能够根据multiinex特定行中的不同类别创建一个包含此数据的箱线图.例如,如果我按'SPECIES'进行分组,我会在时间序列的特定时间为每个组提供组,'aq','gr','mix','sed'和一个框.

我试过这个:

grouped = data['2013-08-17'].groupby(axis=1, level='SPECIES')
grouped.boxplot()
Run Code Online (Sandbox Code Playgroud)

但是它为组中的每个点而不是分组集提供了一个箱线图(扁平线).是否有捷径可寻?我没有任何问题分组,因为我可以按照我想要的方式聚合组,但我不确定我在这个盒子图中做错了什么.

任何帮助,将不胜感激.

python multi-index dataframe pandas pandas-groupby

22
推荐指数
2
解决办法
4万
查看次数

熊猫聚合带有动态列名

我有一个脚本,该脚本生成具有数量不定的值列的熊猫数据框。例如,此df可能是

import pandas as pd
df = pd.DataFrame({
'group': ['A', 'A', 'A', 'B', 'B'],
'group_color' : ['green', 'green', 'green', 'blue', 'blue'],
'val1': [5, 2, 3, 4, 5], 
'val2' : [4, 2, 8, 5, 7]
})

  group group_color  val1  val2
0     A       green     5     4
1     A       green     2     2
2     A       green     3     8
3     B        blue     4     5
4     B        blue     5     7
Run Code Online (Sandbox Code Playgroud)

My goal is to get the grouped mean for each of the value columns. In this …

python aggregate pandas pandas-groupby

22
推荐指数
3
解决办法
551
查看次数

使用Groupby的Python Pandas条件求和

使用样本数据:

df = pd.DataFrame({'key1' : ['a','a','b','b','a'],
               'key2' : ['one', 'two', 'one', 'two', 'one'],
               'data1' : np.random.randn(5),
               'data2' : np. random.randn(5)})
Run Code Online (Sandbox Code Playgroud)

DF

    data1        data2     key1  key2
0    0.361601    0.375297    a   one
1    0.069889    0.809772    a   two
2    1.468194    0.272929    b   one
3   -1.138458    0.865060    b   two
4   -0.268210    1.250340    a   one
Run Code Online (Sandbox Code Playgroud)

我试图找出如何按key1对数据进行分组,并仅将key2等于'one'的data1值相加.

这是我尝试过的

def f(d,a,b):
    d.ix[d[a] == b, 'data1'].sum()

df.groupby(['key1']).apply(f, a = 'key2', b = 'one').reset_index()
Run Code Online (Sandbox Code Playgroud)

但这给了我一个"无"值的数据框

index   key1    0
0       a       None
1       b       None
Run Code Online (Sandbox Code Playgroud)

这里有什么想法?我正在寻找与以下SQL相当的Pandas:

SELECT Key1, SUM(CASE WHEN …
Run Code Online (Sandbox Code Playgroud)

python pandas pandas-groupby

21
推荐指数
2
解决办法
3万
查看次数