【发布时间】:2021-04-23 15:06:32
【问题描述】:
经过 24 小时毫无意义的尝试后,除了“救命!”之外,我没有别的词了。 我的数据框包含 2 列:'uid' int,'course_id' 作为 2 个或更多其他 id (int) 的元组。
| uid | course_id |
|---|---|
| 1 | (1,2) |
| 2 | (1,2) |
| 3 | (1,3) |
| 4 | (1,2,3) |
| 5 | (2,3) |
一种这样的,但有 13k 行。虽然原始 df 我有未分组的行 uid-course_id。喜欢
| uid | course_id |
|---|---|
| 1 | 1 |
| 1 | 2 |
| 2 | 1 |
等等。 我需要另一个数据框,其中包含所有唯一的 course_id 对以及在第二列中具有这些对的用户数。像这样但更大(4k 行):
| pair | users |
|---|---|
| (1,2) | 3 |
| (1,3) | 2 |
| (2,3) | 2 |
我可以创建一个包含所有唯一对的列,但我不知道如何计算用户数。最接近的函数是
def user_count(pair):
total_users = df[
np.isin(df['course_id'], pair)
].groupby(
'uid', as_index=False
).filter(
lambda x: len(x)==2
).groupby(
'course_id', as_index=False
).count()['uid'][0]
return total_users
当我给出一个精确的元组时,对于原始数据框和工作,但它不适用于 df.apply(user_count)。 使用原始 df 或过滤并组合成元组更容易吗?我如何计算每一对的所有用户?
【问题讨论】:
-
可以假设元组
(1, 2)与(2, 1)相同吗? -
@It_is_Chris 是的,完全一样
-
@alex
uid列是否包含重复条目? -
@ShubhamSharma 具有 1 个 uid 和 1 个 course_id 的原始数据框 - 是的。我记得 1 个 uid 最多可以有 7 门课程,所以它会在 df 中出现 7 次。组合 df 与元组 - 不,唯一 uid 和唯一 course_ids 的元组
-
@ShubhamSharma 这就是我制作组合 df 的方式(我的问题中的第一个表):D
pair_list = [] for i in df_mcid.resource_id: pair_list.append(list(itertools.combinations(i,2))) pair_list = list(set(itertools.chain(*pair_list)))这是我拥有的独特配对。