获取表中元素相对于另一列的频率

Posted

技术标签:

【中文标题】获取表中元素相对于另一列的频率【英文标题】:Getting the Frequency of Elements in a Table With Respect to Another Column 【发布时间】:2021-06-08 17:59:32 【问题描述】:

我有一个关于根据列的频率将表格转换为另一种格式并按另一列分组的问题。我确定以前有人问过这个问题,但我找不到正确的搜索关键字,所以我想我会问这个问题。

我有下表:

Patient Diagnosis
Ralph A
Ralph A
Steve B

我想把它转换成这个:

Patient A B
Ralph 2 0
Steve 0 1

任何帮助或指点将不胜感激!我已经到了df.groupby("Patient").Diagnosis.value_counts(),但这并不包括患者的所有诊断(即诊断计数为 0 的患者)。

【问题讨论】:

你可以试试pd.crosstab(df['Patient'], df['Diagnosis']) 【参考方案1】: 只是PatientDiagnosislen() unstack() 制作诊断列 剩下的就是达到你具体输出的细节
df = pd.read_csv(io.StringIO("""Patient Diagnosis
Ralph   A
Ralph   A
Steve   B"""), sep="\t")

df = (df.groupby(["Patient","Diagnosis"]).agg(len)
 .to_frame().unstack().droplevel(0, axis=1).fillna(0).astype(int)
 .reset_index().rename_axis(None, axis=1)
)

Patient A B
0 Ralph 2 0
1 Steve 0 1

【讨论】:

【参考方案2】:

正如 Shubham 所说,您可以cross tabulate:

import pandas as pd
df = pd.DataFrame(
    'Patient': ['Ralph', 'Ralph', 'Steve'],
    'Diagnosis': ['A', 'A', 'B'],
)
pd.crosstab(df.Patient, df.Diagnosis)

输出:

Diagnosis   A   B
Patient         
Ralph       2   0
Steve       0   1

【讨论】:

以上是关于获取表中元素相对于另一列的频率的主要内容,如果未能解决你的问题,请参考以下文章

使用同一表中另一列的数据计数更新一列? [关闭]

使用同一表中另一列的键更新 mysql 列

我可以将列的默认值设置为同一表中同一行上另一列的字符串吗?

基于针对另一列的参考表更新 Pandas 数据框列的问题

尝试使用 MySQL 创建具有同一表中另一列的季节至今平均值的列

根据不同数据类型的另一列设置一列的默认值