我有一個這種格式的資料框:
| 年齡等級 | 性別 | 國籍 | 治療 | 唯一身份 | 網路時間 | 時鐘時間 | |
|---|---|---|---|---|---|---|---|
| 0 | 20 | 米 | 肯 | 治療 | 354658649da56c20c72b6689d2b7e1b8cc334ac9 | 7661 | 7661 |
| 1 | 20 | 米 | 肯 | 治療 | 1da607e762ac07eba6f9b5a717e9ff196d987242 | 7737 | 7737 |
| 2 | 20 | 米 | 肯 | 控制 | 1de4a95cef28c290ba5790217288f510afc3b26b | 7747 | 7747 |
| 3 | 30 | 米 | 肯 | 控制 | 12215d93d2cb5b0234991a64d097955338a73dd3 | 7750 | 7750 |
| 4 | 30 | 米 | 肯 | 治療 | 5375986567be20b49067956e989884908fb807f6 | 8163 | 8163 |
| 5 | 20 | 米 | 以太坊 | 治療 | 613be??609b3f4a38834c2bc35bffbdb6c47418666 | 7811 | 7811 |
| 6 | 20 | 米 | 肯 | 控制 | 70fb3284d112dc27a5cad7f705b38bc91f56ecad | 7853 | 7853 |
| 7 | 30 | 米 | 澳大利亞 | 控制 | 0ea5d606a83eb68c89da0a98543b815e383835e3 | 7902 | 7902 |
| 8 | 20 | 米 | 胸罩 | 控制 | ecdd57df778ad901b41e79dd2713a23cb8f13860 | 7923 | 7923 |
| 9 | 20 | 米 | 以太坊 | 控制 | ae7fe893268d86b7a1bdb4489f9a0798797c718c | 7927 | 7927 |
目的是確定哪個年齡組從時鐘時間測量的治療組中受益最大。這意味著我需要以某種方式將每個年齡組中成員的所有值分組為治療和控制條件,并取他們的時鐘時間的平均值。然后,我需要獲取子組的平均時鐘時間的差異,并將所有這些時間相互比較。
我被卡住的地方是同時基于多列過濾資料框。我嘗試使用 groupby() 如下:
df.groupby(['ageClass','treatment'])['clockTime'].mean()
但是,我無法從結果系列中計算平均時間的差異。
我應該如何前進?
uj5u.com熱心網友回復:
您可以使用您制作的方式旋轉表格
df2 = df.groupby(['ageClass','treatment'])[['clockTime']].mean().reset_index().pivot(columns=['ageClass'], values='clockTime', index='treatment')
ageClass 20 30
treatment
Control 7862.500000 7826.0
Treatment 7736.333333 8163.0
然后很容易找到不同
df2['diff'] = df2[20] - df2[30]
treatment
Control 36.500000
Treatment -426.666667
Name: diff, dtype: float64
uj5u.com熱心網友回復:
從groupby您已經完成的操作中,您可以groupby索引級別 0,即'ageClass',然后用于diff查找每個'ageClass'. 由于diff從第一個中減去第二個(并且“控制”和“治療”按字母順序排序),添加"-Control"以使其更清晰。
s = df.groupby(['ageClass','treatment'])['clockTime'].mean()
out = s.groupby(level=0).diff().dropna().reset_index()
out = out.assign(treatment=out['treatment'] '-Control')
輸出:
ageClass treatment clockTime
0 20 Treatment-Control -126.166667
1 30 Treatment-Control 337.000000
uj5u.com熱心網友回復:
根據您的問題描述,我會規定排名。群體之間的差異不會告訴誰受益最多
s=df.groupby(['ageClass','treatment'])['clockTime'].agg('mean').reset_index()
s['rank']=s.groupby('ageClass')['clockTime'].rank()
ageClass treatment clockTime rank
0 20 Control 7862.500000 2.0
1 20 Treatment 7736.333333 1.0
2 30 Control 7826.000000 1.0
3 30 Treatment 8163.000000 2.0
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/415735.html
標籤:
