我有一個具有這種結構的 df:
id a1_l1 a2_l1 a3_l1 a1_l2 a2_l2 a3_l2
1 1 5 3 1 2 3
2 1 5 3 1 2 3
3 2 5 3 5 5 3
4 5 5 3 5 5 3
5 5 5 2
6 5 5 2
7 5 5 2
8 2 5 2
9 3 5 1
10 3 5 1
我想在表格中進行總結,以便我得到:
l1 l2
a1 0.4 0.5
a2 1 0.5
a3 0 0
我正在做的是計算 5 出現的次數除以有效回應的數量,例如:
a1, l1 等于 .4,因為我有 4 個 5 值除以 10。a2, l1 等于 0.5,因為我有 2 個 5 值除以每列 4 個有效回應。
謝謝!
uj5u.com熱心網友回復:
試試 pd.wide_to_long
s = pd.wide_to_long(df,['a1','a2','a3'],i='id',j = 'level',sep='_',suffix='\\w ')
out = s.eq(5).groupby(level=1).sum()
out = out.T.div(s.groupby(level=1).size())
out
level l1 l2
a1 0.4 0.2
a2 1.0 0.2
a3 0.0 0.0
uj5u.com熱心網友回復:
您也可以洗掉該id列drop('id', axis=1)而不是set_index('id')
- 使用計算每列的百分比
(x == 5).sum() / x.notna().sum() - 重置索引以獲得我們可以使用的列
- 通過拆分索引生成 'a' 和 'l' 列
- 樞
tmp = df.set_index('id').apply(lambda x: x.eq(5).sum()/x.notna().sum()).reset_index()
tmp[['a', 'l']] = tmp['index'].str.split('_', expand=True)
>>>
index 0 a l
0 a1_l1 0.4 a1 l1
1 a2_l1 1.0 a2 l1
2 a3_l1 0.0 a3 l1
3 a1_l2 0.5 a1 l2
4 a2_l2 0.5 a2 l2
5 a3_l2 0.0 a3 l2
tmp.drop('index', axis=1).pivot(index='a', columns='l').droplevel(0, axis=1).rename_axis(None).rename_axis(None, axis=1)
>>>
l1 l2
a1 0.4 0.5
a2 1.0 0.5
a3 0.0 0.0
uj5u.com熱心網友回復:
您可以使用 MultiIndex 重塑資料幀,然后對 (sum的真值等于 5)執行簡單除法而不是 na。最后,unstack:
df2 = df.set_index('id')
df2.columns = pd.MultiIndex.from_arrays(zip(*df2.columns.map(lambda x: x.split('_'))))
df2 = (df2.eq(5).sum()/df2.notna().sum()).unstack()
輸出:
l1 l2
a1 0.4 0.5
a2 1.0 0.5
a3 0.0 0.0
uj5u.com熱心網友回復:
所有的答案看起來都同樣復雜,所以我決定運行一些基準測驗來幫助 OP 做出決定。
| 解決方案 | 平均運行時間 |
|---|---|
| 莫茲韋 | 2.1 毫秒 |
| 阿什·M。 | 4.5 毫秒 |
| 貝尼 | 13.3 毫秒 |
恭喜,@mozway!
細節:
# mozway
2.15 ms ± 29 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)
2.09 ms ± 17 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)
2.1 ms ± 20.3 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)
2.1 ms ± 16.4 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)
2.09 ms ± 13.7 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)
2.1 ms ± 10.3 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)
# Asish M.
4.51 ms ± 18.7 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)
4.49 ms ± 25.5 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)
4.48 ms ± 20.7 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)
4.51 ms ± 29.8 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)
4.48 ms ± 12.4 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)
# BENY
13.5 ms ± 419 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)
13.3 ms ± 700 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)
13.3 ms ± 285 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)
13.3 ms ± 163 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)
13.2 ms ± 190 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/351726.html
下一篇:Python中的HTTPGET
