创建新的 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
如果你想要一个参与者在三个测试中的任何一个中得分 1
或 2
的 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
.
我有一个 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
如果你想要一个参与者在三个测试中的任何一个中得分 1
或 2
的 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
.