【问题标题】:Convert groupby values into list of arrays [duplicate]将groupby值转换为数组列表[重复]
【发布时间】:2018-11-30 08:40:47
【问题描述】:

这是一个示例数据框:

label  data
a      1.09
b      2.1
a      5.0
b      2.0
c      1.9

我想要的是

arr = [[1.09, 5.0], [2.1, 2.0],[1.9]]

最好是 numpy 数组的列表。

我知道df.groupby.groups.keys() 给了我['a','b','c'] 的列表,df.groupby.groups.values() 给了我类似arr 的东西,但是作为Int64Index 对象。但是,我尝试了df.loc[df.groupby.groups.values()]['label'] 并没有得到想要的结果。

我该如何做到这一点?谢谢!

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    最好是 numpy 数组的列表。

    最好不要,因为您要求参差不齐的数组,这意味着内部数组(AKA,行)的长度并不相同。这对 numpy 来说很不方便,这意味着它无法在内部将这些数组有效地存储为 C 数组。它最终会退回到缓慢的 python 对象。

    在这种情况下,我建议使用嵌套的 Python 列表。这可以通过groupby + apply 来实现。

    lst = df.groupby('label')['data'].apply(pd.Series.tolist).tolist()
    print(lst)
    [[1.09, 5.0], [2.1, 2.0], [1.9]]
    

    【讨论】:

    • 我收到了这个错误:AttributeError: 'DataFrameGroupBy' object has no attribute 'data'
    • @irene 嗯,它应该是您的专栏名称?请用稍微不同的语法再试一次(编辑 ^)。
    • 这不是类似的吗? stackoverflow.com/questions/22219004/…
    • @Dark 是的。由于对数组的了解很少,我将把这个留在这里 :)
    • 哦哈哈我明白了。谢谢!另外,是否保证这遵循df.groupby('label').groups.keys() 中的顺序? @coldspeed
    猜你喜欢
    • 1970-01-01
    • 2019-01-21
    • 2014-07-14
    • 2017-01-12
    • 1970-01-01
    • 2012-04-01
    • 2022-07-07
    • 2017-12-01
    • 2016-03-25
    相关资源
    最近更新 更多