gpt4 book ai didi

python - 使用 pandas GroupBy 聚合来自多列的唯一值

转载 作者:太空宇宙 更新时间:2023-11-03 15:37:26 25 4
gpt4 key购买 nike

我进入了无数线程(1 2 3 ...),但我仍然没有找到解决问题的方法...我有一个这样的数据框:

prop1 prop2 prop3    prop4 
L30 3 bob 11.2
L30 54 bob 10
L30 11 john 10
L30 10 bob 10
K20 12 travis 10
K20 1 travis 4
K20 66 leo 10

我想对 prop1 进行分组,同时聚合所有其他列,但仅使用唯一值。像那样:

prop1  prop2       prop3       prop4
L30 3,54,11,10 bob,john 11.2,10
K20 12,1,66 travis,leo 10,4

我尝试了不同的方法:

  1. df.groupby('prop1')['prop2','prop3','prop4'].apply(np.unique)返回

AttributeError: 'numpy.ndarray' object has no attribute 'index' PLUS TypeError: Series.name must be a hashable type

  1. 另外:.apply(lambda x: pd.unique(x.values.ravel()).tolist()) 给出一个列表作为输出,我想要列.

  2. df.groupby('prop1')['prop2','prop3','prop4'].unique() 本身不起作用,因为有多个列。

  3. .apply(f) 其中 f 为:

    def f(df):
    df['prop2']=df['prop2'].drop_duplicates()
    df['prop3']=df['prop3'].drop_duplicates()
    df['prop4']=df['prop4'].drop_duplicates()
    返回 df

什么都不做。

  1. 我还尝试使用具有不同选项的 .agg() 但没有成功。

你们中有人知道吗?

非常感谢:)

最佳答案

使用 groupbyagg,并通过调用 Series.unique 仅聚合唯一值:

df.astype(str).groupby('prop1').agg(lambda x: ','.join(x.unique()))

prop2 prop3 prop4
prop1
K20 12,1,66 travis,leo 10.0,4.0
L30 3,54,11,10 bob,john 11.2,10.0

df.astype(str).groupby('prop1', sort=False).agg(lambda x: ','.join(x.unique()))

prop2 prop3 prop4
prop1
L30 3,54,11,10 bob,john 11.2,10.0
K20 12,1,66 travis,leo 10.0,4.0

如果处理 NaN 很重要,请提前调用 fillna:

import re
df.fillna('').astype(str).groupby('prop1').agg(
lambda x: re.sub(',+', ',', ','.join(x.unique()))
)

prop2 prop3 prop4
prop1
K20 12,1,66 travis,leo 10.0,4.0
L30 3,54,11,10 bob,john 11.2,10.0

关于python - 使用 pandas GroupBy 聚合来自多列的唯一值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54133679/

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