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

时间:2015-01-31 17:09:06

标签: python pandas dataframe

我有一个包含6列和多行的pandas数据帧,每行都是来自实验中特定参与者的数据。每列是参与者响应并包含其分数的特定比例。我想创建一个新的数据框,其中只包含那些参与者的数据,这些参与者的某个特定指标的得分与标准相符。

标准是它必须匹配我单独生成的列表中的一个项目。

要解释一下,我在数据框中有数据,我想隔离在与感兴趣的分数列表匹配的6个度量中的一个中得分的参与者。我希望新数据框中的所有6列都只包含感兴趣的参与者行。希望这很清楚。

我尝试使用groupby函数,但它没有提供足够的特异性来指定标准,或者至少我不知道如果存在这样的方法的语法。我对熊猫很新。

2 个答案:

答案 0 :(得分:1)

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

就像,你有一个"结果" 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

答案 1 :(得分:1)

您可以使用isin()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

如果您希望DataFrame的参与者在三个测试中的任何一个中获得12,您可以执行以下操作:

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