python - 使用另一个数据帧中的值对对数据帧进行子化

标签 python pandas

我有一个名为 In CorrectQuestions_dfDataFrame,如下所示:

enter image description here

这些问题对可以在此 DataFrame 中重复很多很多次。此 DataFrame 中总共约有 5000 万条记录。

我使用现有的 DataFrame 创建另一个 DataFrame,用于计算问题对的总数。这是我使用的代码:

IncorrectQuestions_count = pd.DataFrame(IncorrectQuestions_df.groupby(['Question1', 'Question2'])
                                    .size()
                                    ,columns=['Count'])

现在我只想保留至少出现 5 次的对,因此我使用以下代码进行子集化:

IncorrectQuestions_count = IncorrectQuestions_count[IncorrectQuestions_count['Count'] >= 5]
IncorrectQuestions_count.reset_index(inplace=True)

这给了我以下内容:

enter image description here

In CorrectQuestions_count 大约有 80,000 对。我想对 In CorrectQuestion_df 进行子集化,以仅包含 In CorrectQuestions_count 中存在的对。如果我编写 2 个 for 循环来执行此操作,将需要大量时间才能完成,所以我想知道是否有更 Pythonic 的方法来实现此目的?

如有任何指点,我们将不胜感激。

TIA。

最佳答案

您可以通过合并操作来完成此操作。

df=pd.DataFrame({'q1':randint(0,3,26),'q2':randint(0,3,26),
'state':[chr(i+ord('a')) for i in range(26)]})

cnts=df.groupby(['q1','q2']).count()>4

df['ok']=df.merge(cnts,left_on=cnts.index.names,right_index=True).state_y
result=df[df.ok]

对于这个例子:

    q1  q2   state      ok
0    2   1       a    True
2    2   1       c    True
9    2   1       j    True
22   2   1       w    True
24   2   1       y    True

关于python - 使用另一个数据帧中的值对对数据帧进行子化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42541603/

相关文章:

python - Pandas 拆分列名称

python - 根据开始和结束日期按组扩展行

python - TFLearn 对每个预测产生相同的结果

python - 禁用 Python 的 re.findall() 的 "group becomes tuple"行为

python - 模块未找到错误 : No module named 'redis'

python - pandas 从数据帧中删除每个字段具有非空值的行(Python 3.4/IPython)

Python - 正则表达式查找所有重复模式,后跟可变长度的字符

python - 如何获取scrapy失败的URL?

Python Pandas 在 X 上线性插值 Y

python - 如何导入带有 "occasional"引号的 csv(R 和/或 Pandas)?