【问题标题】:Filter pandas data frame on unique pair values根据唯一对值过滤熊猫数据框
【发布时间】:2017-10-26 10:08:48
【问题描述】:

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

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):

TeamA   TeamB   Time

1   2   12:06
1   2   13.14

对于 (1,3):

TeamA   TeamB   Time

1   3   14.14
1   3   13.14

等等

编辑:

我事先不知道数据框中的团队。那就是我需要为每对可能的团队提供一个数据框。

【问题讨论】:

  • 为什么 (3, 1) 不被视为第 2 组的一部分?
  • 在某个辅助列中连接团队 A 和团队 B,例如放入排序列表,然后在此辅助列上进行分组
  • (3,1) 或 (1,3) 也应该在同一个组中,不应该吗?
  • 你能回答我的问题吗?如果不是,那么我的答案无效,我想将其删除。谢谢。
  • 是的,你认为它是第 1 组的一部分

标签: python pandas slice


【解决方案1】:

创建dictionary of DataFrames:

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

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

【讨论】:

  • 但是我不提前知道有哪些团队可以使用
  • 然后简单地按字典循环,我将其添加到答案中。
  • 谢谢,效果很好,但我怀疑这是否是从计算角度来看的最佳方法/
  • 您认为解决方案是否很快?
  • 对于存储多个DataFrames 是dictionary 非常好的选择。
猜你喜欢
  • 2013-06-09
  • 2014-12-27
  • 2020-08-08
  • 1970-01-01
  • 2021-12-01
  • 2022-12-06
  • 2020-08-16
  • 2016-08-31
  • 2020-05-05
相关资源
最近更新 更多