相关疑难解决方法(0)

Pandas - 如何在列中展平分层索引

我有一个数据框,在第1轴(列)中有一个分层索引(来自一个groupby.agg操作):

     USAF   WBAN  year  month  day  s_PC  s_CL  s_CD  s_CNT  tempf       
                                     sum   sum   sum    sum   amax   amin
0  702730  26451  1993      1    1     1     0    12     13  30.92  24.98
1  702730  26451  1993      1    2     0     0    13     13  32.00  24.98
2  702730  26451  1993      1    3     1    10     2     13  23.00   6.98
3  702730  26451  1993      1    4     1     0    12     13  10.04   3.92
4  702730  26451  1993      1    5     3     0    10     13  19.94  10.94
Run Code Online (Sandbox Code Playgroud)

我想扁平它,所以它看起来像这样(名字不重要 …

python dataframe pandas

266
推荐指数
12
解决办法
17万
查看次数

命名返回Pandas聚合函数中的列?

我在使用Pandas的groupby功能时遇到了麻烦.我已经阅读了文档,但是我无法弄清楚如何将聚合函数应用于多个列为这些列提供自定义名称.

这非常接近,但返回的数据结构具有嵌套的列标题:

data.groupby("Country").agg(
        {"column1": {"foo": sum()}, "column2": {"mean": np.mean, "std": np.std}})
Run Code Online (Sandbox Code Playgroud)

(即.我想取column2的mean和std,但将这些列作为"mean"和"std"返回)

我错过了什么?

python group-by aggregate-functions pandas

69
推荐指数
4
解决办法
8万
查看次数

在Pandas Groupby函数中重命名列名

1).我有以下示例数据集:

>>> df
    ID     Region  count
0  100       Asia      2
1  101     Europe      3
2  102         US      1
3  103     Africa      5
4  100     Russia      5
5  101  Australia      7
6  102         US      8
7  104       Asia     10
8  105     Europe     11
9  110     Africa     23
Run Code Online (Sandbox Code Playgroud)

我想通过ID和Region对这个数据集的观察进行分组,并总结每个组的计数.所以我使用了这样的东西:

>>> print(df.groupby(['ID','Region'],as_index=False).count().sum())

    ID     Region  count
0  100       Asia      2
1  100     Russia      5
2  101  Australia      7
3  101     Europe      3
4  102         US      9
5  103     Africa      5
6  104       Asia     10 …
Run Code Online (Sandbox Code Playgroud)

python group-by rename pandas

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

大熊猫的聚合

  1. 如何用熊猫进行聚合?
  2. 聚合后没有DataFrame!发生了什么?
  3. 如何聚合主要字符串列(到lists,tuples,strings with separator)?
  4. 如何汇总计数?
  5. 如何创建由聚合值填充的新列?

我已经看到了这些反复出现的问题,询问了大熊猫聚合功能的各个方面.今天关于聚合及其各种用例的大部分信息都是在数十个措辞严重,不可搜索的帖子中分散的.这里的目的是为后代整理一些更重要的观点.

此Q/A旨在成为一系列有用的用户指南中的下一部分:

请注意,这篇文章并不是要取代有关聚合groupby文档,所以请阅读它!

python aggregation dataframe pandas pandas-groupby

15
推荐指数
2
解决办法
7273
查看次数

熊猫:聚合具有多个功能的多列

Python中的Pandas和R中的Dplyr都是灵活的数据整理工具。例如,在R中,使用dplyr可以执行以下操作;

custom_func <- function(col1, col2) length(col1) + length(col2)

ChickWeight %>% 
  group_by(Diet) %>% 
  summarise(m_weight = mean(weight), 
            var_time = var(Time), 
            covar = cov(weight, Time),
            odd_stat = custom_func(weight, Time))
Run Code Online (Sandbox Code Playgroud)

注意如何在一个语句中;

  • 我可以在一行中汇总多个列。
  • 我可以在一行中对这些多个列应用不同的功能。
  • 我可以使用考虑两列的函数。
  • 我可以为其中任何一个添加自定义函数。
  • 我可以为这些聚合声明新的列名。

熊猫也有这种可能吗?请注意,我有兴趣在简短的声明中执行此操作(因此,请不要创建三个不同的数据框,然后再将它们加入)。

编辑

我注意到这个问题被否决了。如果有人可以提及为什么该职位被否决了,我可能有机会改进这个问题。

python r pandas dplyr

5
推荐指数
1
解决办法
1463
查看次数

选定行在Pandas数据框中的聚合

我有一个pandas排序的数据框(基于时间)是这样的:

from datetime import datetime
df = pd.DataFrame({ 'ActivityDateTime' : [datetime(2016,5,13,6,14),datetime(2016,5,13,6,16),
                                 datetime(2016,5,13,6,20),datetime(2016,5,13,6,27),datetime(2016,5,13,6,31),
                                 datetime(2016,5,13,6,32),
                                datetime(2016,5,13,17,34),datetime(2016,5,13,17,36),
                                 datetime(2016,5,13,17,38),datetime(2016,5,13,17,45),datetime(2016,5,13,17,47),
                                datetime(2016,5,16,13,3),datetime(2016,5,16,13,6),
                                 datetime(2016,5,16,13,10),datetime(2016,5,16,13,14),datetime(2016,5,16,13,16)],
              'Value1' : [0.0,2.0,3.0,4.0,0.0,0.0,0.0,7.0,8.0,4.0,0.0,0.0,3.0,9.0,1.0,0.0],
               'Value2' : [0.0,2.0,3.0,4.0,0.0,0.0,0.0,7.0,8.0,4.0,0.0,0.0,3.0,9.0,1.0,0.0]
        })
Run Code Online (Sandbox Code Playgroud)

结果是这样的:

ActivityDateTime    Value1  Value2
0   2016-05-13 06:14:00 0.0 0.0
1   2016-05-13 06:16:00 2.0 2.0
2   2016-05-13 06:20:00 3.0 3.0
3   2016-05-13 06:27:00 4.0 4.0
4   2016-05-13 06:31:00 0.0 0.0
5   2016-05-13 06:32:00 0.0 0.0
6   2016-05-13 17:34:00 0.0 0.0
7   2016-05-13 17:36:00 7.0 7.0
8   2016-05-13 17:38:00 8.0 8.0
9   2016-05-13 17:45:00 4.0 4.0 …
Run Code Online (Sandbox Code Playgroud)

python aggregate time-series pandas

5
推荐指数
1
解决办法
538
查看次数

熊猫GroupBy.agg()引发TypeError:aggregate()缺少1个必需的位置参数:'arg'

我正在尝试创建同一字段的多个聚合。我正在python3.7中的熊猫中工作。根据文档,语法似乎非常简单:

https://pandas-docs.github.io/pandas-docs-travis/user_guide/groupby.html#named-aggregation

我看不到为什么在下面出现错误。有人可以指出问题并告诉我如何解决吗?

码:

qt_dy.groupby('date').agg(std_qty=('qty','std'),mean_qty=('qty','mean'),)
Run Code Online (Sandbox Code Playgroud)

错误:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-62-6bb3aabf313f> in <module>
      5 
      6 qt_dy.groupby('date')\
----> 7 .agg(std_qty=('qty','std'),mean_qty=('qty','mean'))

TypeError: aggregate() missing 1 required positional argument: 'arg'
Run Code Online (Sandbox Code Playgroud)

python aggregate python-3.x pandas pandas-groupby

5
推荐指数
1
解决办法
2101
查看次数

将多个 lambda 函数与 Pandas 数据框结合使用

我有一个 pd 数据框,其中名为“process_id”的列对于多个时间步骤具有与其关联的不同参数。我想从中提取一些信息并将它们放入一个新的数据框中(这样我就不必使用数据的所有细节)。下面是我的意思的一个例子,我为每个“process_id”保留每个参数的最小值、最大值、平均值和标准差,我还定义了一个 lambda 函数来保存最后 5 个时间步中参数的平均值:

features = df.groupby('process_id').agg(['min', 'max', 'mean', 'std', lambda x: x.tail(5).mean()])
Run Code Online (Sandbox Code Playgroud)

这工作正常,并且 lambda 函数将表中参数的名称更改为如下所示:“parameter_lambda”(不确定如何,但它有效)。现在的问题是,如果我想添加另一个 lambda 函数,像这样(或任何其他 lambda 定义):

features = df.groupby('process_id').agg(['min', 'max', 'mean', 'std', lambda x: x.tail(5).mean(),lambda x: x.iloc[0:int(len(df)/5)].mean()])
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

函数名必须唯一,发现多个命名

这是有道理的,因为两个 lambda 函数在数据框中都具有相同的名称。但我不知道如何解决这个问题。

我试过这样的事情:

df.groupby('dummy').agg({'returns':{'Mean': np.mean, 'Sum': np.sum}})
Run Code Online (Sandbox Code Playgroud)

描述在这里,但我得到这个错误:

规范错误:无法使用嵌套字典为返回执行重命名

有人能帮我吗?谢谢!

python lambda pandas

3
推荐指数
1
解决办法
2135
查看次数

Losing String column when using resample and aggregation with pandas

I have a DataFrame with the following structure:

df = df.set_index('timestamp')
print(df.head())

timestamp            id                         value
2018-12-31 23:00:00  5c8fea84763aae175afda38b   98.587768
2018-12-31 23:10:00  5c8fea84763aae175afda38b  107.232742
2018-12-31 23:20:00  5c8fea84763aae175afda38b  104.224153
2018-12-31 23:30:00  5c8fea84763aae175afda38b  104.090750
2018-12-31 23:40:00  5c8fea84763aae175afda38b   99.357023
Run Code Online (Sandbox Code Playgroud)

I need to obtain a new DataFrame with daily max and min values, as well as the mean. I have no problem in obtaining this data and I do it this way:

df = df.resample('D').agg(['min', 'max', 'mean'], columns=['value'])
Run Code Online (Sandbox Code Playgroud)

The problem is that I loose the …

python pandas

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

如何使用“命名聚合”

我想在 Pandas DataFrameGroupBy 的同一列上应用两个不同的聚合,并命名新列。

我已经尝试使用文档中显示的内容。 https://pandas.pydata.org/pandas-docs/stable/user_guide/groupby.html#named-aggregation

In [82]: animals.groupby("kind").agg(
   ....:     min_height=('height', 'min'),
   ....:     max_height=('height', 'max'),
   ....:     average_weight=('weight', np.mean),
   ....: )
   ....: 
Out[82]: 
      min_height  max_height  average_weight
kind                                        
cat          9.1         9.5            8.90
dog          6.0        34.0          102.75
Run Code Online (Sandbox Code Playgroud)

我正在尝试做的事情是:

df = pd.DataFrame({"year": [2001, 2001, 2001, 2005, 2005],
                   "value": [1, 2, 5, 3, 1]})

df = df.groupby("year").agg(sum=('value', 'sum'),
                            count=('value', 'size'))
Run Code Online (Sandbox Code Playgroud)

但是,这给出了以下内容:

TypeError: aggregate() missing 1 required positional argument: 'arg'
Run Code Online (Sandbox Code Playgroud)

python aggregate pandas

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

ivot_table(),多个 aggfunc 到*同一*列 - 可能吗?

编辑 - 请不要锁定此问题,类似的问题链接不提供答案,因为我的问题是将多个 aggfunc 应用于同一列。

我有一个标准的pivot_table()函数通过以下方式应用于数据框:

pivot = df.pivot_table(index=['Year', 'Month'], values=['Claims', 'Policy Holdings'], aggfunc={'Claims': 'min', 'Policy Holdings': 'max'})
Run Code Online (Sandbox Code Playgroud)

我很想知道,假设我想在我的值中使用同一列两次,并使用不同的 aggfunc (即最小值和最大值) - 这可能吗?

以下代码不起作用:

pivot = df.pivot_table(index=['Year', 'Month'], values=['Claims', 'Claims'], aggfunc={'Claims': 'min', 'Claims': 'max'})
Run Code Online (Sandbox Code Playgroud)

当然,我可以预先使用不同的名称复制该列,但我想有更优雅的解决方案可用吗?

python pivot pandas

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