创建新的 pandas 数据框的最佳方法是什么,该数据框由符合条件的现有数据框的特定行组成?

What is the best way to create new pandas dataframe consisting of specific rows of an existing dataframe that match criteria?

我有一个 pandas 数据框,有 6 列和几行,每行都是来自实验中特定参与者的数据。每列都是参与者响应的特定量表并包含他们的分数。我想创建一个新的数据框,其中仅包含那些参与者的数据,这些参与者的某个特定度量的分数符合标准。

条件是它必须与我单独生成的列表中的一项相匹配。

换句话说,我在数据框中有数据,我想隔离在与感兴趣的分数列表相匹配的 6 个度量之一中获得特定分数的参与者。我希望新数据框中的所有 6 列都只包含感兴趣的参与者行。希望这是清楚的。

我尝试使用 groupby 函数,但它在指定标准方面没有提供足够的特异性,或者至少我不知道是否存在此类方法的语法。我是 pandas.

的新手

如果我对你的问题的理解正确,你想查询数据框以将条目包含在列表中。

喜欢,你有一个"results" df喜欢

df = pd.DataFrame({'score1' : np.random.randint(0,10,5)
               , 'score2' : np.random.randint(0,10,5)})

   score1  score2
0       7       2
1       9       9
2       9       3
3       9       3
4       0       4

以及一系列积极的成果

 positive_outcomes = [1,5,7,3]

然后你可以像

一样查询df
 df_final = df[df.score1.isin(positive_outcomes) | df.score2.isin(positive_outcomes)]

获得

   score1  score2
0       7       2
2       9       3
3       9       3

您可以使用 isin() and any() 来隔离在测试中获得特定分数的参与者。

这是一个小示例 DataFrame,显示了三个测试中五个参与者的分数:

>>> df = pd.DataFrame(np.random.randint(1,6,(5,3)), columns=['Test1','Test2','Test3'])
>>> df
   Test1  Test2  Test3
0      3      3      5
1      5      5      2
2      5      3      4
3      1      3      3
4      2      1      1

如果你想要一个参与者在三个测试中的任何一个中得分 12 的 DataFrame,你可以执行以下操作:

>>> score = [1, 2]
>>> df[df.isin(score).any(axis=1)]
   Test1  Test2  Test3
1      5      5      2
3      1      3      3
4      2      1      1

此处 df.isin(score) 创建一个布尔数据帧,显示 df 的每个值是否在列表 scores 中。 any(axis=1) 检查每一行至少有一个 True 值,创建一个布尔系列。然后使用该系列索引 DataFrame df.