从数据框列获取数据作为元组列表

Posted

技术标签:

【中文标题】从数据框列获取数据作为元组列表【英文标题】:Get data as list of tuple from dataframe column 【发布时间】:2019-06-29 08:44:56 【问题描述】:

输入数据框:

    id    value
0    0     10.2
1    1      5.7
2    2      7.4
3    2      2.5
4    1      2.6
5    3      1.6
6    2      2.9
7    0      3.6
8    2      2.7

预期输出:

format :   [(id,count_of_value,[value as a list])] i.e like this 
           [ (0,2,[10.2, 3.6]), (1, 2, [5.7, 2.6]). . ]

到目前为止,我能够获得前两个元素,即 id,它被视为一个元组,我还需要反向排序的数据,

id_list = df.id.tolist()
count = Counter(uid_list)
ID_count_list = sorted(count.items(), key=operator.itemgetter(1),reverse=True)

获取预期输出中解释的值的最有效方法是什么?

【问题讨论】:

【参考方案1】:

您可以使用groupby + apply 一步完成所有操作,匹配所需的输出:

result = df.groupby('id')['value'].apply(lambda x: (x.name, x.size, x.tolist())).tolist()
print(result)

输出

[(0, 2, [10.2, 3.6]), (1, 2, [5.7, 2.6]), (2, 4, [7.4, 2.5, 2.9, 2.7]), (3, 1, [1.6])]

鉴于上面的输出,您可以这样排序:

result = [(0, 2, [10.2, 3.6]), (1, 2, [5.7, 2.6]), (2, 4, [7.4, 2.5, 2.9, 2.7]), (3, 1, [1.6])]
s = sorted(result, key=operator.itemgetter(1), reverse=True)
print(s)

输出 (已排序)

[(2, 4, [7.4, 2.5, 2.9, 2.7]), (0, 2, [10.2, 3.6]), (1, 2, [5.7, 2.6]), (3, 1, [1.6])]

【讨论】:

不错的编辑:)。我们的解决方案之间的唯一区别是您在 apply 中创建元组(可能效率较低,但也可能更具可读性)。 谢谢@jpp!你知道 agg 是否比 apply 快吗?我只是好奇。 我不确定,老实说,我的 instinctagg,因为您没有构建一系列tuples,但我可能错了。 @DanielMesejo :谢谢它的工作,但我希望数据按排序顺序 @DanielMesejo:请检查我的问题,我希望它根据最大计数进行排序【参考方案2】:

这是一个groupby 问题。如果列表列表就足够了:

res = df.groupby('id')['value'].agg(['count', lambda x: x.tolist()])\
        .reset_index().values.tolist()

print(res)

# [[0, 2, [10.2, 3.6]], [1, 2, [5.7, 2.6]],
#  [2, 4, [7.4, 2.5, 2.9, 2.7]], [3, 1, [1.6]]]

对于元组的列表,还有一个额外的步骤:

res = list(map(tuple, res))

print(res)

# [(0, 2, [10.2, 3.6]), (1, 2, [5.7, 2.6]),
#  (2, 4, [7.4, 2.5, 2.9, 2.7]), (3, 1, [1.6])]

【讨论】:

你今天会在那里。恭喜恭喜。 @cph_sto,谢谢,刚到,我先休息一下:) Member for 1 year - 非常快。哇...现在去伦敦一家不错的酒吧宠爱自己...这是您的日常。 你激起了我的好奇心已经有一段时间了,如果你允许的话,让我直接告诉你吧! - 我记得你达到 100K 大关的那一天。那是 2 月 5 日。从那天起,你为什么要空白句号来回答任何进一步的问题?似乎你给自己定了一个目标,实现了它,然后就永远退出了。它确实说明了你的性格——你给人的印象是一个具有极大的自制力、纪律和毅力的人,不用说。

以上是关于从数据框列获取数据作为元组列表的主要内容,如果未能解决你的问题,请参考以下文章

来自元组列表的数据框列过滤器

根据数据类型获取 pandas 数据框列的列表

Python:遍历数据框列,检查存储在数组中的条件值,并将值获取到列表中

如何通过文件处理从给定的数据框列中获取唯一对?

从 Spark 数据框列中 ArrayType 类型的行中获取不同的元素

在变量中获取数据框列,如何?