标签: pandas-groupby

如何对列表中其他列分组的列进行求和?

我有一个如下列表.

[['Andrew', '1', '9'], ['Peter', '1', '10'], ['Andrew', '1', '8'], ['Peter', '1', '11'], ['Sam', '4', '9'], ['Andrew', '2', '2']]
Run Code Online (Sandbox Code Playgroud)

我想总结由其他列分组的最后一列.结果是这样的

[['Andrew', '1', '17'], ['Peter', '1', '21'], ['Sam', '4', '9'], ['Andrew', '2', '2']]
Run Code Online (Sandbox Code Playgroud)

这仍然是一个清单.

在实际操作中,我总是想总结由许多其他列分组的最后一列.有没有办法在Python中做到这一点?非常感激.

python list dataframe pandas pandas-groupby

15
推荐指数
5
解决办法
807
查看次数

Pandas中的变换与聚合

在对Pandas DataFrame进行分组时,我transform何时应该使用aggregate?何时应该使用?它们在实践中的应用有何不同,您认为哪一个更重要?

python aggregation pandas pandas-groupby

14
推荐指数
1
解决办法
3032
查看次数

为什么groupby这么快?

这是对此问题的一个后续问题,其中jezrael使用pandas.DataFrame.groupby将列表创建速度提高几百倍.具体来说,让我们df成为一个大型数据帧

index = list(set(df.index))
list_df = [df.loc(x) for x in index]
Run Code Online (Sandbox Code Playgroud)

list_df = [x for i,x in df.groupby(level=0, sort=False)]
Run Code Online (Sandbox Code Playgroud)

产生相同的结果,后者比前者快200多倍,甚至忽略了列表创建步骤.为什么?

如果有人能让我理解为什么会有这么大的性能差异,我会很高兴的.提前致谢!

编辑:正如Alex Riley在评论中所建议的,我确认测试是在具有非唯一和非单调索引的数据框架上运行的.

python performance dataframe pandas pandas-groupby

14
推荐指数
1
解决办法
1439
查看次数

pandas:GroupBy .pipe()vs .apply()

在关于GroupBy对象的新方法的pandas文档的示例中.pipe(),.apply()接受相同lambda 的方法将返回相同的结果.

In [195]: import numpy as np

In [196]: n = 1000

In [197]: df = pd.DataFrame({'Store': np.random.choice(['Store_1', 'Store_2'], n),
   .....:                    'Product': np.random.choice(['Product_1', 'Product_2', 'Product_3'], n),
   .....:                    'Revenue': (np.random.random(n)*50+10).round(2),
   .....:                    'Quantity': np.random.randint(1, 10, size=n)})

In [199]: (df.groupby(['Store', 'Product'])
   .....:    .pipe(lambda grp: grp.Revenue.sum()/grp.Quantity.sum())
   .....:    .unstack().round(2))

Out[199]: 
Product  Product_1  Product_2  Product_3
Store                                   
Store_1       6.93       6.82       7.15
Store_2       6.69       6.64       6.77
Run Code Online (Sandbox Code Playgroud)

我可以看到pipe功能与applyDataFrame对象的不同之处,但不适用于GroupBy对象.有没有人对GroupBy 有什么解释或示例,pipe但没有apply

python python-3.x pandas pandas-groupby

14
推荐指数
1
解决办法
5061
查看次数

如果单行的条件为真,则标记整个组

我有一个数据框,其中包含日期和公共假期

Date    WeekNum Public_Holiday
1/1/2015    1   1
2/1/2015    1   0
3/1/2015    1   0
4/1/2015    1   0
5/1/2015    1   0
6/1/2015    1   0
7/1/2015    1   0
8/1/2015    2   0
9/1/2015    2   0
10/1/2015   2   0
11/1/2015   2   0
12/1/2015   2   0
13/1/2015   2   0
Run Code Online (Sandbox Code Playgroud)

我必须创建一个名为Public_Holiday_Week的条件列,如果该特定周有公共假日,则该列应返回1

我希望看到这样的输出

Date    WeekNum Public_Holiday  Public_Holiday_Week
1/1/2015    1   1               1
2/1/2015    1   0               1
3/1/2015    1   0               1
4/1/2015    1   0               1
5/1/2015    1   0               1
6/1/2015    1   0               1
7/1/2015    1   0               1
8/1/2015    2   0 …
Run Code Online (Sandbox Code Playgroud)

python group-by dataframe pandas pandas-groupby

14
推荐指数
2
解决办法
933
查看次数

如何使用Python/Pandas从Date字段按月分组

我有一个数据帧df,如下所示:

| date      | Revenue |
|-----------|---------|
| 6/2/2017  | 100     |
| 5/23/2017 | 200     |
| 5/20/2017 | 300     |
| 6/22/2017 | 400     |
| 6/21/2017 | 500     |
Run Code Online (Sandbox Code Playgroud)

我需要按月对上述数据进行分组,以获得输出:

| date | SUM(Revenue) |
|------|--------------|
| May  | 500          |
| June | 1000         |
Run Code Online (Sandbox Code Playgroud)

我试过这段代码,但它不起作用:

df.groupby(month('date')).agg({'Revenue': 'sum'})
Run Code Online (Sandbox Code Playgroud)

我想只使用Pandas或Numpy而不使用其他库

python pandas pandas-groupby

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

Pandas groupby和聚合输出应包括所有原始列(包括未聚合的列)

我有以下数据框架,并希望:

  • 分组记录 month
  • 总和QTY_SOLDNET_AMT每个独特UPC_ID(每月)
  • 在结果数据框中包括其余列

我想我能做到这一点的方法是1:创建一个month聚合列D_DATES,再总结QTY_SOLDUPC_ID.

脚本:

# Convert date to date time object
df['D_DATE'] = pd.to_datetime(df['D_DATE'])

# Create aggregated months column
df['month'] = df['D_DATE'].apply(dt.date.strftime, args=('%Y.%m',))

# Group by month and sum up quantity sold by UPC_ID
df = df.groupby(['month', 'UPC_ID'])['QTY_SOLD'].sum()
Run Code Online (Sandbox Code Playgroud)

当前数据框:

UPC_ID | UPC_DSC | D_DATE | QTY_SOLD | NET_AMT
----------------------------------------------
111      desc1    2/26/2017   2         10 (2 x $5)
222      desc2    2/26/2017   3         15
333 …
Run Code Online (Sandbox Code Playgroud)

python group-by dataframe pandas pandas-groupby

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

Python Pandas:将DataFrame Group的最后一个值分配给该组的所有条目

在Python Pandas中,我有一个DataFrame.我按列对此DataFrame进行分组,并希望将列的最后一个值分配给另一列的所有行.

我知道我可以通过此命令选择组的最后一行:

import pandas as pd

df = pd.DataFrame({'a': (1,1,2,3,3), 'b':(20,21,30,40,41)})
print(df)
print("-")
result = df.groupby('a').nth(-1)
print(result)
Run Code Online (Sandbox Code Playgroud)

结果:

   a   b
0  1  20
1  1  21
2  2  30
3  3  40
4  3  41
-
    b
a    
1  21
2  30
3  41
Run Code Online (Sandbox Code Playgroud)

如何将此操作的结果分配回原始数据帧,以便我有类似的东西:

   a   b b_new
0  1  20 21
1  1  21 21
2  2  30 30
3  3  40 41
4  3  41 41
Run Code Online (Sandbox Code Playgroud)

python group-by dataframe pandas pandas-groupby

13
推荐指数
2
解决办法
2637
查看次数

在有序分类列上使用groupby的奇怪行为

MCVE

df = pd.DataFrame({
    'Cat': ['SF', 'W', 'F', 'R64', 'SF', 'F'], 
    'ID': [1, 1, 1, 2, 2, 2]
})

df.Cat = pd.Categorical(
    df.Cat, categories=['R64', 'SF', 'F', 'W'], ordered=True)
Run Code Online (Sandbox Code Playgroud)

如您所见,我已经定义了一个有序的分类列Cat.验证,检查;

0     SF
1      W
2      F
3    R64
4     SF
5      F
Name: Cat, dtype: category
Categories (4, object): [R64 < SF < F < W]
Run Code Online (Sandbox Code Playgroud)

我想找到最大的PER ID类别.做groupby+ max工作.

df.groupby('ID').Cat.max()

ID
1    W
2    F
Name: Cat, dtype: object
Run Code Online (Sandbox Code Playgroud)

但我不希望ID成为索引,所以我指定as_index=False.

df.groupby('ID', as_index=False).Cat.max()

   ID Cat …
Run Code Online (Sandbox Code Playgroud)

python group-by pandas categorical-data pandas-groupby

13
推荐指数
1
解决办法
355
查看次数

过滤数据框并根据给定条件添加新列

我有一个这样的数据框

ID      col1           col2 
1    Abc street       2017-07-27 
1    None             2017-08-17 
1    Def street       2018-07-15 
1    None             2018-08-13 
2    fbg street       2018-01-07 
2    None             2018-08-12 
2    trf street       2019-01-15 
Run Code Online (Sandbox Code Playgroud)

我想过滤col1中的所有“无”并将相应的col2值添加到新列col3中。我的输出看起来像这样

ID      col1           col2              col3 
1    Abc street       2017-07-27     2017-08-17          
1    Def street       2018-07-15     2018-08-13             
2    fbg street       2018-01-07     2018-08-12             
2    trf street       2019-01-15     
Run Code Online (Sandbox Code Playgroud)

谁能帮助我实现这一目标。

python numpy python-3.x pandas pandas-groupby

13
推荐指数
4
解决办法
320
查看次数