【发布时间】:2021-09-03 10:29:43
【问题描述】:
我有一个df,由人、始发地和目的地组成
df = pd.DataFrame({'PersonID':['1','1','2','2','2','3'],'O':['A','B','C','B','A','X'],'D':['B','A','B','A','B','Y']})
df:
PersonID O D
1 A B
1 B A
2 C B
2 B A
2 A B
3 X Y
我已将 df 与 df_grouped = df.groupby(['O','D']) 分组,并将它们与另一个数据框 taxi 匹配。
TaxiID O D
T1 B A
T2 A B
T3 C B
同样,我将taxi 与他们的O 和D 分组。然后我在聚合和计算每个 O-D 对的 PersonID 和 TaxiID 后合并它们。我这样做是为了看看有多少出租车可供多少人使用。
O D PersonID TaxiID
count count
A B 2 1
B A 2 1
C B 1 1
现在,我想执行df.loc 以仅 获取合并文件中计数的那些 PersonID。我怎样才能做到这一点?我试过了:
seek = df.loc[df.PersonID.isin(merged['PersonID'])]
但它返回一个空数据框。我该怎么做?
编辑:我使用虚拟数据附上了这个案例的完整代码
df = pd.DataFrame({'PersonID':['1','1','2','2','2','3'],'O':['A','B','C','B','A','X'],'D':['B','A','B','A','B','Y']})
taxi = pd.DataFrame({'TaxiID':['T1','T2','T3'],'O':['B','A','C'],'D':['A','B','B']})
df_grouped = df.groupby(['O','D'])
taxi_grouped = taxi.groupby(['O','D'])
dfm = df_grouped.agg({'PersonID':['count',list]}).reset_index()
tgm = taxi_grouped.agg({'TaxiID':['count',list]}).reset_index()
merged = pd.merge(dfm, tgm, how='inner')
seek = df.loc[df.PersonID.isin(merged['PersonID'])]
【问题讨论】:
-
你能展示你的完整代码吗?
-
@jezrael 我已经编辑并添加了完整的代码
标签: python pandas dataframe pandas-groupby