首页 > 解决方案 > 在 pandas 数据框中选择具有两个唯一标识符的行并将它们存储为新数据框

问题描述

我有一个非常大的、未排序的 pandas 数据框(超过 200 万行),其中包含多列,其中两列标识这些行属于哪个类别。如果“K”“U”的组合代表这些行的唯一类别,我想选择属于这些类别中的每一个的所有行,并将这些行存储为单独的数据框,以便稍后进行操作和分析机器学习模型。让我解释

'a' 'b' 'c' 'K' 'U' 'd'
------------------------
aaa bbb ccc 2245 23 ddd
avd bad cec 2245 23 dwq
avd bad cec 2646 23 dwq
avd bad cec 1621 23 dwq
avd bad cec 1621 26 dwq

最上面的两行具有相同的"K""U"值,所以我希望将它们存储在一起,但是,由于KU的组合不同,其他行都属于不同的类别,所以这些将存储在单独的数据框中。

我的第一个“解决方案”使用 for 循环遍历数据帧的K,创建一个新的数据帧来封装包含唯一K的每一行,并为这个新的K数据帧中的每个U创建另一个 for 循环。然后,我在此循环中创建了第二个数据框,其中包含当前U的每一行。这种方法没有按预期工作,但我觉得我已经接近解决问题的方法了。整个数据帧的速度慢得让人难以忍受,如果有更快、更合适的解决方案,我们将不胜感激。我将如何以适当、更有效的方式执行此操作?

标签: pythonpandasdataframe

解决方案


你可以这样做:

         c     K   U    d
     0  aaa  2245  23  ddd
     1  avd  2245  23  dwq
     2  avd  2646  23  dwq
     3  avd  1621  23  dwq
     4  avd  1621  26  dwq 

grouped_df = dataframe.groupby(['K','U'])
for key,df in grouped_df:
  print('\n',key,'\n',df.head())

(1621, 23) 
      c     K   U    d
  3  avd  1621  23  dwq

(1621, 26) 
      c     K   U    d
  4  avd  1621  26  dwq

(2245, 23) 
      c     K   U    d
  0  aaa  2245  23  ddd
  1  avd  2245  23  dwq

(2646, 23) 
      c     K   U    d
  2  avd  2646  23  dwq

这样,您就有 n 个不同的数据帧,它们具有相同的“K”和“U”对值。分组后,您可以使用 get_group 方法访问单个数据帧,该方法提供如下键:

df_n=grouped_df.get_group((2245, 23))

(2245, 23) 
      c     K   U    d
  0  aaa  2245  23  ddd
  1  avd  2245  23  dwq

推荐阅读