import numpy as np
import pandas as pd
data = {'experiment_name': ['exp1', 'exp1', 'exp1', 'exp1', 'exp1', 'exp1'],
'variant': ['A', 'B', 'A','B','A','B'],'sessions_with_orders':[1,2,6,0,23,12],
'total_sessions':[10,23,56,22,89,12]}
Create DataFrame
df = pd.DataFrame(data)
final_pivot=(df.pivot_table(index='variant',columns='experiment_name',values=['total_sessions','sessions_with_orders'],aggfunc=np.sum)
.assign(ratio=lambda d: d['sessions_with_orders']/d['total_sessions']) )
final_pivot_reset=final_pivot.reset_index()##this 使用 .iloc 創建可訪問的資料框
type(final_pivot_reset)
pandas.core.frame.DataFrame
我不認為final_pivot.reset_index()做正確的事?
此外,我在從重置輸出訪問列/名稱方面遇到挑戰。當我查看列名時,它們是分層的(默認輸出來自pivot_table)。
final_pivot_reset.columns
MultiIndex([( 'variant', ''),
('sessions_with_orders', 'exp1'),
( 'total_sessions', 'exp1'),
( 'ratio', '')],
names=[None, 'experiment_name'])
比如我想訪問final_pivot_reset.ratio我怎么實作呢?
我創建了一篇關于如何為 pivot_table pandas 動態創建自定義列的帖子 - pivot || 為比率/百分比創建自定義列
謝謝你。
uj5u.com熱心網友回復:
您可以在使用分隔符MultiIndex之后展平,因此更改. 最后如果需要轉換為列添加:pivot_table_ratioindexvariantDataFrame.reset_index
final_pivot=df.pivot_table(index='variant',
columns='experiment_name',
values=['total_sessions','sessions_with_orders'],
aggfunc=np.sum)
final_pivot.columns = [f'{a}_{b}' for a, b in final_pivot.columns]
final_pivot = (final_pivot.assign(ratio=lambda d: d['sessions_with_orders_exp1']/d['total_sessions_exp1'])
.reset_index())
print (final_pivot)
variant sessions_with_orders_exp1 total_sessions_exp1 ratio
0 A 30 155 0.193548
1 B 14 57 0.245614
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/464387.html
上一篇:無法將“str”物件轉換為RSApython中的位元組錯誤
下一篇:為什么我得到無效的語法?
