gpt4 book ai didi

python - 在 Pandas 中是否有一种 pythonic 的方法来做一个列联表?

转载 作者:IT老高 更新时间:2023-10-28 20:24:28 25 4
gpt4 key购买 nike

给定一个如下所示的数据框:

            A   B      
2005-09-06 5 -2
2005-09-07 -1 3
2005-09-08 4 5
2005-09-09 -8 2
2005-09-10 -2 -5
2005-09-11 -7 9
2005-09-12 2 8
2005-09-13 6 -5
2005-09-14 6 -5

有没有像这样创建 2x2 矩阵的 Pythonic 方法:

    1  0
1 a b
0 c d

地点:

a = A 列和 B 列的对应元素均为正数的 obs 数。

b = B 列中 A 列对应元素为正数和负数的 obs 数。

c = obs 的数量,其中 A 列的相应元素在 B 列中为负数和正数。

d = A 列和 B 列对应元素均为负数的 obs 数。

对于本例,输出将是:

    1  0
1 2 3
0 3 1

谢谢

最佳答案

使用 pandas 函数 crosstab 可能是最简单的。借用上面的Dyno Fu:

import pandas as pd
from StringIO import StringIO
table = """dt A B
2005-09-06 5 -2
2005-09-07 -1 3
2005-09-08 4 5
2005-09-09 -8 2
2005-09-10 -2 -5
2005-09-11 -7 9
2005-09-12 2 8
2005-09-13 6 -5
2005-09-14 6 -5
"""
sio = StringIO(table)
df = pd.read_table(sio, sep=r"\s+", parse_dates=['dt'])
df.set_index("dt", inplace=True)

pd.crosstab(df.A > 0, df.B > 0)

输出:

B      False  True 
A
False 1 3
True 3 2

[2 rows x 2 columns]

如果您想使用 scipy.stats 等进行 Fisher 精确测试,该表也可用:

from scipy.stats import fisher_exact
tab = pd.crosstab(df.A > 0, df.B > 0)
fisher_exact(tab)

关于python - 在 Pandas 中是否有一种 pythonic 的方法来做一个列联表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29901436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com