【发布时间】:2020-11-09 11:12:14
【问题描述】:
我有一个这样的数据集:
d = pd.DataFrame({
'users_list':[["us1", "us2", "us3", "us5", "us5"], ['us2', "us3", 'us2']],
'users_tuples': [[('us1', 'us2'), ('us2', 'us3'), ('us5', 'us1'), ('us5', 'us1')], [('us2', 'us3'), ('us3', 'us2')]]})
首先我得到一个不重复的所有用户列表,如下所示:
all_users = sorted(list(set(sum([x for x in d['users_list']],[]))))
然后我有以下内容:
for us in all_users:
d[us] = d.apply(lambda x : [1 if (a, us) in x['users_tuples'] else 0 for a in x['users_list']], 1)
但我得到的答案是一个列表:
us1 us2 us3 us5
[0, 0, 0, 1, 1] [1, 0, 0, 0, 0] [0, 1, 0, 0, 0] [0, 0, 0, 0, 0]
[0, 0, 0] [0, 1, 0] [1, 0, 1] [0, 0, 0]
我想要这些中每一个的总和,所以它将是:
us1 us2 us3 us5
2 1 1 0
0 1 2 0
我知道我可以做到这一点:
for us in all_users:
d[us] = d.apply(lambda x : sum([1 if (a, us) in x['users_tuples'] else 0 for a in x['users_list']]), 1)
但我认为所有这些转换都不是有效的,我想知道是否有更有效的方法来完成它们。
【问题讨论】:
-
你能添加预期的输出吗?
-
是的,我已经更新了更多细节!
标签: arrays python-3.x pandas algorithm performance