【问题标题】:Reverse a Cross Tabulation or Frequency Table反转交叉表或频率表
【发布时间】:2019-09-09 21:54:29
【问题描述】:

假设我有一个频率表df 定义为:

dat = [[0, 2, 1], [1, 0, 3], [4, 1, 1]]
idx = pd.Index([*'abc'], name='One')
col = pd.Index([*'xyz'], name='Two')
df = pd.DataFrame(dat, idx, col)

df

Two  x  y  z
One         
a    0  2  1
b    1  0  3
c    4  1  1

我如何“反转”它以获得数据框pre_df

   One Two
0    a   y
1    a   y
2    a   z
3    b   x
4    b   z
5    b   z
6    b   z
7    c   x
8    c   x
9    c   x
10   c   x
11   c   y
12   c   z

这样pd.crosstab(pre_df.One, pre_df.Two) 会让我回到df

Two  x  y  z
One         
a    0  2  1
b    1  0  3
c    4  1  1

【问题讨论】:

    标签: python pandas pivot-table


    【解决方案1】:

    试试stackrepeat

    s = df.stack()
    s.index.repeat(s).to_frame().reset_index(drop=True)
    

    输出:

       One Two
    0    a   y
    1    a   y
    2    a   z
    3    b   x
    4    b   z
    5    b   z
    6    b   z
    7    c   x
    8    c   x
    9    c   x
    10   c   x
    11   c   y
    12   c   z
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 2014-03-06
      • 2020-07-01
      • 1970-01-01
      • 2016-01-25
      • 1970-01-01
      • 2021-07-29
      相关资源
      最近更新 更多