答案 0 :(得分:2)
如果您提供了数据预转动样本,则可以获得更好的解决方案。
hr = df.heart_rate
bp = df.blood_pressure
keys = ['heart_rate', 'blood_pressure', 'my_metric']
pd.concat([hr, bp, hr / bp], axis=1, keys=keys)
示例
idx = pd.MultiIndex.from_product([
['t%s'%i for i in range(1, 6)],
['h1', 'h2']
], names=['Time', 'Hospital'])
col = pd.MultiIndex.from_product([
['heart_rate', 'blood_pressure'],
['Type1', 'Type2']
], names=['metric', 'bodytype'])
df = pd.DataFrame(
np.random.randint(10, size=(10, 4)),
idx, col
)
df
metric heart_rate blood_pressure
bodytype Type1 Type2 Type1 Type2
Time Hospital
t1 h1 6 3 8 3
h2 3 4 2 9
t2 h1 5 7 7 0
h2 9 4 9 4
t3 h1 8 8 7 9
h2 5 5 3 5
t4 h1 0 1 5 1
h2 4 9 5 9
t5 h1 0 0 1 5
h2 2 0 5 0
hr = df.heart_rate
bp = df.blood_pressure
keys = ['heart_rate', 'blood_pressure', 'my_metric']
pd.concat([hr, bp, hr / bp], axis=1, keys=keys)
heart_rate blood_pressure my_metric
bodytype Type1 Type2 Type1 Type2 Type1 Type2
Time Hospital
t1 h1 6 3 8 3 0.750000 1.000000
h2 3 4 2 9 1.500000 0.444444
t2 h1 5 7 7 0 0.714286 inf
h2 9 4 9 4 1.000000 1.000000
t3 h1 8 8 7 9 1.142857 0.888889
h2 5 5 3 5 1.666667 1.000000
t4 h1 0 1 5 1 0.000000 1.000000
h2 4 9 5 9 0.800000 1.000000
t5 h1 0 0 1 5 0.000000 0.000000
h2 2 0 5 0 0.400000 NaN
答案 1 :(得分:1)
我通过创建一个不同的pivot_table然后简单地将bodytype
从columns
移动到index
来解决这个问题。
pivot_df["my_metric"] = pivot_df["heart_rate"] / pivot_df["blood_pressure"]