python 转置 Dataframe

8tntrjer  于 2022-12-17  发布在  Python
关注(0)|答案(1)|浏览(70)

这是我的数据:

{'size_A': {Timestamp('2021-01-01 00:00:00'): 600, Timestamp('2021-01-02 00:00:00'): 930}, 'size_B': {Timestamp('2021-01-01 00:00:00'): 700, Timestamp('2021-01-02 00:00:00'): 460}, 'weight_A': {Timestamp('2021-01-01 00:00:00'): 100, Timestamp('2021-01-02 00:00:00'): 120}, 'weight_B': {Timestamp('2021-01-01 00:00:00'): 150, Timestamp('2021-01-02 00:00:00'): 89}}

我不想把信息放在列中,而想把它放在行中。

df.T

不起作用,因为这样列名中就有日期了。
我想在索引中添加一个带有日期的 Dataframe ,并添加一个名为bacterium的列,我们可以在其中找到名称:

{'bacterium': {Timestamp('2021-01-01 00:00:00'): 'B', Timestamp('2021-01-02 00:00:00'): 'B'}, 'size': {Timestamp('2021-01-01 00:00:00'): 700, Timestamp('2021-01-02 00:00:00'): 700}, 'weight': {Timestamp('2021-01-01 00:00:00'): 150, Timestamp('2021-01-02 00:00:00'): 150}}

如果你想看到一张照片的目的:aim

ruarlubt

ruarlubt1#

  • 在这个答案的前一个版本中,我提出了一个不必要的复杂程序。*
    此问题实际上可以通过三个相对简单的步骤来解决:
    首先,注意你的列名实际上是在编码一个2x2的MultiIndex,所以让我们从creating a MultiIndex from tuples开始。要做到这一点,我们首先需要将现有的列名转换成元组。这很容易,因为我们知道它们应该在最后一个下划线处拆分。
# Convert column names into MultiIndex, giving an informative name to the level with label data
column_tuples = df.columns.str.rsplit("_", n=1)
column_tuples = [tuple(c) for c in column_tuples]
df.columns = pd.MultiIndex.from_tuples(column_tuples,names=[None,'bacterium'])

下一步,使用df.stack()从列MultiIndex中获取“bacterium”级别,并将其移动到行MultiIndex中。这与您尝试的转置操作不太相同。

df = df.stack('bacterium')

最后,使用带有level参数的df.reset_index()从MultiIndex行中获取细菌水平,并将其作为适当的列。

df = df.reset_index('bacterium')

结果:

bacterium  min_area  size
2021-01-01      Baci      1285   700
2021-01-01       Ent      1240   600
2021-01-02      Baci       953   460
2021-01-02       Ent      1503   930

相关问题