Python 根据唯一对值筛选数据帧

Python 根据唯一对值筛选数据帧,python,pandas,slice,Python,Pandas,Slice,我有一个熊猫数据框,其中包含关于两支球队在不同时间进行的比赛的信息: TeamA TeamB Time 1 2 12:06 1 2 13.14 1 3 14.14 1 3 13.14 3 1 15.22 获取“子”数据帧的最简单方法是什么(不是双倍循环),该数据帧只包含关于唯一团队对的信息,例如: 对于(1,2): 对于(1,3): 等等 编辑: 我事先不知道数据框中有哪些团队。也就是说,我需要为每一对可能的团队提供一个数据框架 创建数据帧字典

我有一个熊猫数据框,其中包含关于两支球队在不同时间进行的比赛的信息:

TeamA   TeamB   Time

1   2   12:06
1   2   13.14
1   3   14.14
1   3   13.14
3   1   15.22
获取“子”数据帧的最简单方法是什么(不是双倍循环),该数据帧只包含关于唯一团队对的信息,例如:

对于(1,2):

对于(1,3):

等等

编辑


我事先不知道数据框中有哪些团队。也就是说,我需要为每一对可能的团队提供一个数据框架

创建数据帧字典:

dfs = dict(tuple(df.groupby(['TeamA','TeamB'])))
print (dfs[(1,2)])
   TeamA  TeamB   Time
0      1      2  12:06
1      1      2  13.14

如果需要所有值:

for i, x in dfs.items():
    print (x)
   TeamA  TeamB   Time
0      1      2  12:06
1      1      2  13.14
   TeamA  TeamB   Time
2      1      3  14.14
3      1      3  13.14
   TeamA  TeamB   Time
4      3      1  15.22
如果想要在同一组中的最后一行:

cols = ['TeamA','TeamB']
a = df[cols].apply(sorted, 1)
dfs = dict(tuple(df.groupby([a[cols[0]], a[cols[1]]])))

for i, x in dfs.items():
    print (x)
   TeamA  TeamB   Time
0      1      2  12:06
1      1      2  13.14

   TeamA  TeamB   Time
2      1      3  14.14
3      1      3  13.14
4      3      1  15.22

为什么(3,1)不被视为组2的一部分?将某个助手列中的团队A和团队B连接到一个排序列表中,然后此助手列(3,1)或(1,3)上的groupby也应该在同一组中,不是吗?你能回答我的问题吗?如果不是,那么我的答案是无效的,我想删除它。谢谢。是的,你认为它是第一组的一部分,但我不知道哪些队是可用的,然后简单地用字典循环,我把它加起来回答。谢谢,效果很好。但我的疑问是,从计算角度来看,这是否是最好的方法/您认为解决方案是否非常快?对于存储多个
数据帧
s是
字典
非常好的选择。
print (dfs[(1,3)])
   TeamA  TeamB   Time
2      1      3  14.14
3      1      3  13.14
for i, x in dfs.items():
    print (x)
   TeamA  TeamB   Time
0      1      2  12:06
1      1      2  13.14
   TeamA  TeamB   Time
2      1      3  14.14
3      1      3  13.14
   TeamA  TeamB   Time
4      3      1  15.22
cols = ['TeamA','TeamB']
a = df[cols].apply(sorted, 1)
dfs = dict(tuple(df.groupby([a[cols[0]], a[cols[1]]])))

for i, x in dfs.items():
    print (x)
   TeamA  TeamB   Time
0      1      2  12:06
1      1      2  13.14

   TeamA  TeamB   Time
2      1      3  14.14
3      1      3  13.14
4      3      1  15.22