说,我在一个大型交通数据集中有两个不同的列,一个具有旅行ID,另一个具有用户ID。我该如何计算两个人一起骑同一趟旅程的次数,即不同的用户ID但同一趟ID?
df = pd.DataFrame([[1, 1, 1, 2, 2, 3, 3, 4, 4, 4, 5, 5], ['A', 'B', 'C', 'A', 'B', 'A', 'B', 'B', 'C', 'D', 'D','A']]).T
df.columns = ['trip_id', 'user_id']
print(df)
trip_id user_id
0 1 A
1 1 B
2 1 C
3 2 A
4 2 B
5 3 A
6 3 B
7 4 B
8 4 C
9 4 D
10 5 D
11 5 A
理想的输出将是某种聚合的数据透视表或交叉表,该表或交叉表显示每个user_id及其与其他user_id的旅行次数,以便查看谁在一起旅行次数最多。
我尝试过这样的事情:
df5 = pd.crosstab(index=df4['trip_id'], columns=df4['user_id'])
df5['sum'] = df5[df5.columns].sum(axis=1)
df5
user_id A B C D sum
trip_id
1 1 1 1 0 3
2 1 1 0 0 2
3 1 1 0 0 2
4 0 1 1 1 3
5 1 0 0 1 2
我可以用来获取每次旅行的平均用户,但不能获得唯一的user_id一起骑行的频率。
我还尝试了一些变化:
df.trip_id = df.trip_id+'_'+df.groupby(['user_id','trip_id']).cumcount().add(1).astype(str)
df.pivot('trip_id','user_id')
但是我没有得到想要的东西。我不确定是否需要通过for循环进行迭代来解决这个问题,或者是否需要从交叉表中堆叠数据框以获取这些汇总值。另外,我试图避免将原始数据中的trip_id和user_id汇总为数字数据类型,因为它们不应被视为整数,而应视为字符串。
感谢您可能提供的任何见解!
答案 0 :(得分:0)
这是示例数据集
import pandas as pd
df = pd.DataFrame([[1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 3], ['A', 'B', 'C', 'A', 'B', 'C', 'A', 'B', 'C', 'A', 'B']]).T
df.columns = ['trip_id', 'user_id']
print(df)
礼物:
trip_id user_id
0 1 A
1 1 B
2 1 C
3 2 A
4 2 B
5 2 C
6 3 A
7 3 B
8 3 C
9 3 A
10 3 B
我认为您要的是:
df.groupby(['trip_id', 'user_id']).size()
trip_id user_id
1 A 1
B 1
C 1
2 A 1
B 1
C 1
3 A 2
B 2
C 1
dtype: int64
我正确吗?