python pandas excel 排序_Pandas 按组汇总和列排序 - python

在Python Pandas中,如何根据'A'列的总和对数据框进行分组并按'B'列的值排序,同时考虑'C'列的True/False状态?本文提供了一种解决方案,涉及使用`groupby`, `transform`, `sort_values`等函数来实现所需排序。" 113452102,10545026,MongoDB范围分片与事务操作详解,"['数据库', 'MongoDB', '分片技术', '事务管理', '数据建模']
摘要由CSDN通过智能技术生成

给定以下数据框

In [31]: rand = np.random.RandomState(1)

df = pd.DataFrame({'A': ['foo', 'bar', 'baz'] * 2,

'B': rand.randn(6),

'C': rand.rand(6) > .5})

In [32]: df

Out[32]: A B C

0 foo 1.624345 False

1 bar -0.611756 True

2 baz -0.528172 False

3 foo -1.072969 True

4 bar 0.865408 False

5 baz -2.301539 True

我想按A的合计总和(然后按B中的值(不合计))按组(C)对它进行排序。所以基本上得到A组的顺序

In [28]: df.groupby('A').sum().sort('B')

Out[28]: B C

A

baz -2.829710 1

bar 0.253651 1

foo 0.551377 1

然后通过对/错,最终看起来像这样:

In [30]: df.ix[[5, 2, 1, 4, 3, 0]]

Out[30]: A B C

5 baz -2.301539 True

2 baz -0.528172 False

1 bar -0.611756 True

4 bar 0.865408 False

3 foo -1.072969 True

0 foo 1.624345 False

如何才能做到这一点?

参考方案

Groupby A:

In [0]: grp = df.groupby('A')

在每个组中,对B求和,然后使用transform广播值。然后按B排序:

In [1]: grp[['B']].transform(sum).sort('B')

Out[1]:

B

2 -2.829710

5 -2.829710

1 0.253651

4 0.253651

0 0.551377

3 0.551377

通过从上方传递索引来索引原始df。这将按B值的总和对A值重新排序:

In [2]: sort1 = df.ix[grp[['B']].transform(sum).sort('B').index]

In [3]: sort1

Out[3]:

A B C

2 baz -0.528172 False

5 baz -2.301539 True

1 bar -0.611756 True

4 bar 0.865408 False

0 foo 1.624345 False

3 foo -1.072969 True

最后,使用sort=False选项对“A”组中的“C”值进行排序,以保留第1步中的A排序顺序:

In [4]: f = lambda x: x.sort('C', ascending=False)

In [5]: sort2 = sort1.groupby('A', sort=False).apply(f)

In [6]: sort2

Out[6]:

A B C

A

baz 5 baz -2.301539 True

2 baz -0.528172 False

bar 1 bar -0.611756 True

4 bar 0.865408 False

foo 3 foo -1.072969 True

0 foo 1.624345 False

通过使用reset_index和drop=True清理df索引:

In [7]: sort2.reset_index(0, drop=True)

Out[7]:

A B C

5 baz -2.301539 True

2 baz -0.528172 False

1 bar -0.611756 True

4 bar 0.865408 False

3 foo -1.072969 True

0 foo 1.624345 False

Python Pandas:按分组分组,平均? - python

我有一个像这样的数据框:cluster org time 1 a 8 1 a 6 2 h 34 1 c 23 2 d 74 3 w 6 我想计算每个集群每个组织的平均时间。预期结果:cluster mean(time) 1 15 ((8+6)/2+23)/2 2 54 (74+34)/2 3 6 我不知道如何在熊猫中做到这一点,有人可以帮忙吗? 参考方案 如…Python Pandas:在多列上建立布尔索引 - python

尽管至少有关于如何在Python的pandas库中为DataFrame编制索引的two good教程,但我仍然无法在一个以上的列上找到一种优雅的SELECT编码方式。>>> d = pd.DataFrame({'x':[1, 2, 3, 4, 5], 'y':[4, 5, 6, 7, 8]}) &gt…python pandas:按行对条件进行分组 - python

我有一个大的pandas数据框,试图从中形成一些行的对。我的df如下所示:object_id increment location event 0 1 d A 0 2 d B 0 3 z C 0 4 g A 0 5 g B 0 6 i C 1 1 k A 1 2 k B ... ... ... ... 对象ID描述特定的对象。增量是每次发生某事(跟踪订单)时…python :安装 python 后,如何导入 Pandas - python

我已经安装了 python 。现在,当我尝试跑步时import pandas as pd 我收到以下错误Traceback (most recent call last): File "", line 1, in import pandasFile ImportError: …Python-Excel导出 - python

我有以下代码:import pandas as pd import requests from bs4 import BeautifulSoup res = requests.get("https://www.bankier.pl/gielda/notowania/akcje") soup = BeautifulSoup(res.cont…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值