【问题标题】: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'])

标签: python pandas count pandas-groupby frequency


【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2019-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-25
      • 1970-01-01
      • 1970-01-01
      • 2018-06-05
      • 1970-01-01
      相关资源
      最近更新 更多