获取表中元素相对于另一列的频率
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】:
只是Patient和Diagnosis的len()
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
【讨论】:
以上是关于获取表中元素相对于另一列的频率的主要内容,如果未能解决你的问题,请参考以下文章