这是我的数据框:
df = pd.DataFrame({'Period': ['1_Baseline', '1_Baseline', '1_Baseline', '2_Acute', '2_Acute', '2_Acute', '3_Chronic', '3_Chronic', '3_Chronic', '4_Discontinuation', '4_Discontinuation', '4_Discontinuation'],
'Subject': [1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3],
'Amount': [24, 52, 34, 95, 98, 54, 32, 20, 16, 52, 34, 95]})
我想创建一个列,其中包含每个主题内每个时段相对于基线的金额变化百分比。因此,对于基线检查,它将显示受试者1从基线检查到急性、从基线检查到慢性3、从基线检查到停药4的数量变化。它会对每个主题做同样的事情
以下是我尝试过的:
df['pct_change'] = df.groupby(['Period'])['Amount'].pct_change()
但我得到:
Period Subject Amount pct_change
0 1_Baseline 1 24 NaN
1 1_Baseline 2 52 1.166667
2 1_Baseline 3 34 -0.346154
3 2_Acute 1 95 1.794118
4 2_Acute 2 98 0.031579
5 2_Acute 3 54 -0.448980
6 3_Chronic 1 32 -0.407407
7 3_Chronic 2 20 -0.375000
8 3_Chronic 3 16 -0.200000
9 4_Discontinuation 1 52 2.250000
10 4_Discontinuation 2 34 -0.346154
11 4_Discontinuation 3 95 1.794118
结果不会在每个时期内计算,也不会与每个受试者之前的金额相关
预期产出:
Period Subject Amount pct_change
0 1_Baseline 1 24 NaN
1 1_Baseline 2 52 NaN
2 1_Baseline 3 34 NaN
3 2_Acute 1 95 2.958333333
4 2_Acute 2 98 0.884615385
5 2_Acute 3 54 0.588235294
6 3_Chronic 1 32 0.333333333
7 3_Chronic 2 20 -0.615384615
8 3_Chronic 3 16 -0.529411765
9 4_Discontinuation 1 52 1.166666667
10 4_Discontinuation 2 34 -0.346153846
11 4_Discontinuation 3 95 1.794117647
IIUC,您想在每一行用
Subject==2
除以Period==1_Baseline
和Subject==2
处的Amount
。以下是我的方法:输出:
请注意,行的顺序非常重要。在这种情况下,您的行顺序是正确的,因此可以正常工作。如果您对订单不确定,则更安全的做法是合并:
相关问题 更多 >
编程相关推荐