重塑熊猫数据框(部分转置)

时间:2021-02-17 20:37:52

标签: pandas dataframe

我有一个类似于以下的 csv,其中列标题指定时间(小时数):

Day,Location,1,2,3
1/1/2021,A,0.26,0.25,0.49
1/1/2021,B,0.8,0.23,0.55
1/1/2021,C,0.32,0.11,0.58
1/2/2021,A,0.67,0.72,0.49
1/2/2021,B,0.25,0.09,0.56
1/2/2021,C,0.83,0.54,0.7

当我使用

将其作为数据框加载时
df = pd.read_csv(open('VirusLevels.csv', 'r'), index_col=[0,1], header=0)

Pandas 创建一个带有索引 Day 和 Location 以及列名 1、2 和 3 的数据框。

我需要按如下所示重新调整它的形状,其中 Day 和 Time 是索引,Location 是列标题:

enter image description here

我尝试了很多东西,也跟踪了很多兔子洞,但都没有成功。我能找到的最重要的例子建议如下,但它不起作用(说“KeyError:'Day'”)。

df.melt(id_vars=['Day'], var_name= 'Time', 
        value_name = 'VirusLevels').sort_values(by='Location').reset_index(drop=True)

在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

试试:

df = pd.read_csv('VirusLevels.csv', index_col=[0,1])
df.rename_axis(columns='Time').stack().unstack('Location')

# or
# df.rename_axis('Time',axis='columns').stack().unstack('Location') 

输出:

Location              A         B         C
Day      Time                              
1/1/2021 1     0.345307  0.099403  0.474077
         2     0.299947  0.853091  0.352472
         3     0.400975  0.599249  0.743099
1/2/2021 1     0.660258  0.003976  0.295406
         2     0.425434  0.953433  0.418783
         3     0.421021  0.844761  0.369561