gpt4 book ai didi

python - Pandas :按 Pandas 0.23.4 中两列的组合分组

转载 作者:太空宇宙 更新时间:2023-11-03 14:40:40 24 4
gpt4 key购买 nike

我是 Python 的新手。我遇到了Pandas: Group by combination of two columns所以。不幸的是,已接受的答案不再适用于 pandas 版本 0.23.4 该帖子的目的是找出组变量的组合,并为值创建一个字典。即 group_by 应该忽略分组的顺序。

这是公认的答案:

import pandas as pd
from collections import Counter

d = pd.DataFrame([('a','b',1), ('a','c', 2), ('b','a',3), ('b','a',3)],
columns=['x', 'y', 'score'])

d[['x', 'y']] = d[['x', 'y']].apply(sorted, axis=1)
x = d.groupby(['x', 'y']).agg(Counter)
print(x)

这里,...apply(sorted) 抛出以下异常:

raise ValueError('Must have equal len keys and value ' ValueError: Must have equal len keys and value when setting with an iterable

这是我的 Pandas 版本:

> pd.__version__
Out: '0.23.4'

这是我阅读后尝试的 https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.sort_values.html :

d = pd.DataFrame([('a','b',1), ('a','c', 2), ('b','a',3), ('b','a',3)],
columns=['x', 'y', 'score'])

d=d.sort_values(by=['x','y'],axis=1).reset_index(drop=True)
x = d.groupby(['x', 'y']).agg(Counter)
print(x)

不幸的是,这也会引发错误:

1382, in _get_label_or_level_values raise KeyError(key) KeyError: 'x'

预期输出:

        score           count
x y
a b {1: 1, 3: 2} 2
c {2: 1} 1

有人可以帮帮我吗?另外,如果您还可以指导如何计算 score 列中 keys() 的计数,那就太好了。我正在寻找矢量化解决方案。

我正在使用 python 3.6.7

非常感谢。

最佳答案

问题是 sorted 返回列表,因此有必要将 ti 转换为 Series:

d[['x', 'y']] = d[['x', 'y']].apply(lambda x: pd.Series(sorted(x)), axis=1)

但更快的是使用numpy.sort使用 DataFrame 构造函数,因为 apply 是引擎盖下的循环:

d = pd.DataFrame([('a','b',1), ('a','c', 2), ('b','a',3), ('b','a',3)],
columns=['x', 'y', 'score'])

d[['x', 'y']] = pd.DataFrame(np.sort(d[['x', 'y']], axis=1), index=d.index)

然后使用聚合函数列表选择聚合列 - 例如nunique计算唯一值的数量:

x = d.groupby(['x', 'y'])['score'].agg([Counter, 'nunique'])
print(x)
Counter nunique
x y
a b {1: 1, 3: 2} 2
c {2: 1} 1

或按DataFrameGroupBy.size计数:

x = d.groupby(['x', 'y'])['score'].agg([Counter, 'size'])
print(x)
Counter size
x y
a b {1: 1, 3: 2} 3
c {2: 1} 1

关于python - Pandas :按 Pandas 0.23.4 中两列的组合分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53589972/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com