我有一个包含6列和多行的pandas数据帧,每行都是来自实验中特定参与者的数据。每列是参与者响应并包含其分数的特定比例。我想创建一个新的数据框,其中只包含那些参与者的数据,这些参与者的某个特定指标的得分与标准相符。
标准是它必须匹配我单独生成的列表中的一个项目。
要解释一下,我在数据框中有数据,我想隔离在与感兴趣的分数列表匹配的6个度量中的一个中得分的参与者。我希望新数据框中的所有6列都只包含感兴趣的参与者行。希望这很清楚。
我尝试使用groupby函数,但它没有提供足够的特异性来指定标准,或者至少我不知道如果存在这样的方法的语法。我对熊猫很新。
答案 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的参与者在三个测试中的任何一个中获得1
或2
,您可以执行以下操作:
>>> 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
。