gpt4 book ai didi

python - 尝试根据相应的索引减去两个不同 Pandas 系列之间的值

转载 作者:太空宇宙 更新时间:2023-11-04 07:15:53 25 4
gpt4 key购买 nike

这是两个系列。它们是在根据两个列值 patient_idevent_description 对数据框进行分组后生成的:

系列 1:

patient_id                                event_description     
A DiagnosisA 2016-09-15
B DiagnosisA 2013-01-01
C DiagnosisA 2016-01-10
D DiagnosisA 2015-01-02

系列 2:

patient_id                                 event_description     
A DiagnosisB 2016-09-30
B DiagnosisB 2013-01-04
D DiagnosisB 2015-01-15

所以我基本上想找出每个患者之间的时间差异。例如,对于患者 A,它将返回 15 天,但对于患者 C,它可能会说“NaN”。

最佳答案

假设您的 groupby 包括 DiagnosisBDiagnosisA,您可以预先unstack 并减去

# This should be what you have after groupby
s = pd.concat([s1, s2])

s

patient_id event_description
A DiagnosisA 2016-09-15
B DiagnosisA 2013-01-01
C DiagnosisA 2016-01-10
D DiagnosisA 2015-01-02
A DiagnosisB 2016-09-30
B DiagnosisB 2013-01-04
D DiagnosisB 2015-01-15
Name: Date, dtype: datetime64[ns]

然后你可以unstack和减法

s.unstack().pipe(lambda d: d.DiagnosisB - d.DiagnosisA)

patient_id
A 15 days
B 3 days
C NaT
D 13 days
dtype: timedelta64[ns]

不推荐
但是 unstacksqueeze 很有趣

s1.unstack().squeeze().rsub(s2.unstack().squeeze())

patient_id
A 15 days
B 3 days
C NaT
D 13 days
dtype: timedelta64[ns]

也不推荐
但是 xs 很有趣

s1.xs('DiagnosisA', level=1).rsub(s2.xs('DiagnosisB', level=1))

patient_id
A 15 days
B 3 days
C NaT
D 13 days
Name: Date, dtype: timedelta64[ns]

最终不推荐
必须显示 pd.IndexSlice
注意:索引需要完全按词法排序才能工作。

s1.loc[pd.IndexSlice[:, 'DiagnosisA']].rsub(s2.loc[pd.IndexSlice[:, 'DiagnosisB']])

patient_id
A 15 days
B 3 days
C NaT
D 13 days
Name: Date, dtype: timedelta64[ns]

关于python - 尝试根据相应的索引减去两个不同 Pandas 系列之间的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47008137/

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