pivot_table:pandas - 如何转换数据框和访问列的数据透视输出?
pivot_table: pandas - how to transform pivot output for data frame and access columns?
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()
做的不对?
此外,我在从重置输出访问 column/names 时遇到了挑战。当我查看列名时,它们是分层的(pivot_table
的默认输出)。
final_pivot_reset.columns
MultiIndex([( 'variant', ''),
('sessions_with_orders', 'exp1'),
( 'total_sessions', 'exp1'),
( 'ratio', '')],
names=[None, 'experiment_name'])
比如我想访问final_pivot_reset.ratio
如何实现?
我已经创建了一个 post 关于如何为 pivot_table
动态创建自定义列
谢谢。
您可以在 pivot_table
之后用分隔符 _
压平 MultiIndex
,因此更改 ratio
的列名。最后如果需要将 index
转换为列 variant
添加 DataFrame.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
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()
做的不对?
此外,我在从重置输出访问 column/names 时遇到了挑战。当我查看列名时,它们是分层的(pivot_table
的默认输出)。
final_pivot_reset.columns
MultiIndex([( 'variant', ''),
('sessions_with_orders', 'exp1'),
( 'total_sessions', 'exp1'),
( 'ratio', '')],
names=[None, 'experiment_name'])
比如我想访问final_pivot_reset.ratio
如何实现?
我已经创建了一个 post 关于如何为 pivot_table
谢谢。
您可以在 pivot_table
之后用分隔符 _
压平 MultiIndex
,因此更改 ratio
的列名。最后如果需要将 index
转换为列 variant
添加 DataFrame.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