我有一个数据框,在第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)
我想扁平它,所以它看起来像这样(名字不重要 …
我在使用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"返回)
我错过了什么?
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) list
s,tuple
s,strings with separator
)?我已经看到了这些反复出现的问题,询问了大熊猫聚合功能的各个方面.今天关于聚合及其各种用例的大部分信息都是在数十个措辞严重,不可搜索的帖子中分散的.这里的目的是为后代整理一些更重要的观点.
此Q/A旨在成为一系列有用的用户指南中的下一部分:
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)
注意如何在一个语句中;
熊猫也有这种可能吗?请注意,我有兴趣在简短的声明中执行此操作(因此,请不要创建三个不同的数据框,然后再将它们加入)。
编辑我注意到这个问题被否决了。如果有人可以提及为什么该职位被否决了,我可能有机会改进这个问题。
我有一个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) 我正在尝试创建同一字段的多个聚合。我正在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) 我有一个 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)
描述在这里,但我得到这个错误:
规范错误:无法使用嵌套字典为返回执行重命名
有人能帮我吗?谢谢!
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 …
我想在 Pandas DataFrameGroupBy 的同一列上应用两个不同的聚合,并命名新列。
我已经尝试使用文档中显示的内容。 https://pandas.pydata.org/pandas-docs/stable/user_guide/groupby.html#named-aggregation
Run Code Online (Sandbox Code Playgroud)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
我正在尝试做的事情是:
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) 编辑 - 请不要锁定此问题,类似的问题链接不提供答案,因为我的问题是将多个 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)
当然,我可以预先使用不同的名称复制该列,但我想有更优雅的解决方案可用吗?
pandas ×11
python ×11
aggregate ×3
dataframe ×2
group-by ×2
aggregation ×1
dplyr ×1
lambda ×1
pivot ×1
python-3.x ×1
r ×1
rename ×1
time-series ×1