首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何对一排排熊猫数据进行诈骗测试?

如何对一排排熊猫数据进行诈骗测试?
EN

Stack Overflow用户
提问于 2019-01-18 11:58:18
回答 1查看 2.1K关注 0票数 0

我有表单的dataframe df

代码语言:javascript
复制
          class_1_frequency    class_2_frequency
group_1          20                    10
group_2          60                    25 
..
group_n          50                    15 

假设class_1共有70个成员,class_2有30个成员。

对于每一行(group_1、group_2、..group_n),我希望创建应急表(最好是动态的),然后执行一个chisquare试验来计算p值。

例如,对于group_1,引擎盖下的应急表如下所示:

代码语言:javascript
复制
                   class_1      class_2
group_1_present      20           10
group_1_absent     70-20         30-10

另外,我知道应急()是chisquare的适当函数,但我无法将它应用到上下文中。我看过以前讨论过的问题,如:这里这里

实现这一目标的最有效方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-18 13:38:54

您可以在apply上利用pd.DataFrame函数。它允许将任意函数应用于DataFrame的列或行。使用您的例子:

代码语言:javascript
复制
df = pd.DataFrame([[20, 10], [60, 25], [50, 15]])

要生成应急表,可以使用lambda和一些向量操作

代码语言:javascript
复制
>>> members = np.array([70, 30])
>>> df.apply(lambda x: np.array([x, members-x]), axis=1)
0    [[20, 10], [50, 20]]
1    [[60, 25], [10,  5]]
2    [[50, 15], [20, 15]]

当然,这可以用scipy函数包装。

代码语言:javascript
复制
df.apply(lambda x: chi2_contingency(np.array([x, members-x])), axis=1)

这会产生所有可能的返回值,但是通过切片输出,可以指定想要的返回值,例如,留下预期的数组。生成的系列还可以转换为DataFrame

代码语言:javascript
复制
>>> s = df.apply(lambda x: chi2_contingency(np.array([x, members-x]))[:-1], axis=1)
>>> s
0    (0.056689342403628114, 0.8118072280034329, 1)
1                                    (0.0, 1.0, 1)
2      (3.349031920460492, 0.06724454934343391, 1)
dtype: object
>>> s.apply(pd.Series)
          0         1    2
0  0.056689  0.811807  1.0
1  0.000000  1.000000  1.0
2  3.349032  0.067245  1.0

现在我不知道这种方法的执行效率,但我相信那些实现了这些功能的人。而且最有可能的是速度没有那么关键。但至少在某种意义上它是有效的,因为它(假设)容易理解,而且写得很快。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54253573

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档