Pandas列名称不匹配

时间:2017-06-28 00:29:06

标签: python pandas dataframe

我有一些时间序列健康数据的Pandas pivot_table,如下所示:

pivot_table

我希望每次每种体型的每个医院得到这两个指标的商数,如下所示:

my_metric

如何在数据框中实现这一目标?

2 个答案:

答案 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然后简单地将bodytypecolumns移动到index来解决这个问题。

pivot_df["my_metric"] = pivot_df["heart_rate"] / pivot_df["blood_pressure"]