【发布时间】:2021-03-06 19:37:30
【问题描述】:
假设我们有一个像这样的表:
id chr val1 val2
... A 2 10
... B 4 20
... A 3 30
...我们希望有一个像这样的列联表(按chr 分组,因此使用'A' 和'B' 作为行索引,然后将val1 和@ 的值相加987654326@):
val1 val2 total
A 5 40 45
B 4 20 24
total 9 60 69
我们怎样才能做到这一点?
pd.crosstab(index=df.chr, columns=["val1", "val2"]) 看起来很有希望,但它只是计算行数,而不是对值求和。
我也尝试过(无数次)手动提供值...
pd.crosstab(
index=df.chr.unique(),
columns=["val1", "val2"],
values=[
df.groupby("chr")["val1"],
df.groupby("chr")["val2"]
],
aggfunc=sum
)
...但这总是以形状不匹配而告终,当我尝试通过 NumPy 重塑时:
values=np.array([
df.groupby("chr")["val1"].values,
df.groupby("chr")["val2"].values
].reshape(-1, 2)
...crosstab 告诉我它需要 1 个值,而不是每行给出的两个值。
【问题讨论】:
标签: python pandas crosstab contingency