从数据框列获取数据作为元组列表
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 快吗?我只是好奇。
我不确定,老实说,我的 instinct 是agg
,因为您没有构建一系列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 日。从那天起,你为什么要空白句号来回答任何进一步的问题?似乎你给自己定了一个目标,实现了它,然后就永远退出了。它确实说明了你的性格——你给人的印象是一个具有极大的自制力、纪律和毅力的人,不用说。以上是关于从数据框列获取数据作为元组列表的主要内容,如果未能解决你的问题,请参考以下文章
Python:遍历数据框列,检查存储在数组中的条件值,并将值获取到列表中