python—将包含二进制列的Dataframe转换为更紧凑的表示形式

u3r8eeie  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(405)

我有以下Dataframe:

  1. import pandas as pd
  2. import numpy as np
  3. np.random.seed(0)
  4. daytime = pd.date_range('2015-02-24', periods=6, freq='d')
  5. df = pd.DataFrame({'DATE': ['2015-02-24', '2015-02-24', '2015-02-25', '2015-02-25', '2015-02-26', '2015-02-26'],
  6. 'HappyCustomer': ['True', 'False','True', 'False','True', 'False'],
  7. 'HappyCustomerCount': [2, 4,1, 6, 2, 3] })
  8. df.set_index('DATE', inplace=True)
  9. df.head(6)
  10. HappyCustomer HappyCustomerCount
  11. DATE
  12. 2015-02-24 True 2
  13. 2015-02-24 False 4
  14. 2015-02-25 True 1
  15. 2015-02-25 False 6
  16. 2015-02-26 True 2
  17. 2015-02-26 False 3

我认为专栏 HappyCustomer 是多余的,因为它总是 'True' 以及 'False' . 我想把这个专栏改成这样:
解决方案:

  1. HappyCustomerCount_True HappyCustomerCount_False
  2. DATE
  3. 2015-02-24 2 4
  4. 2015-02-25 1 6
  5. 2015-02-26 2 3

可选:
在最好的情况下,我可以用(sql相关的)函数来完成这个转换,比如 groupby 因为我以后在sql数据库中也要做同样的工作。
我该怎么做?

uz75evzq

uz75evzq1#

使用, DataFrame.set_index 随着 DataFrame.unstack 要重塑Dataframe,请使用 mapjoin 压平 MultiIndex 柱:

  1. df1 = df.set_index('HappyCustomer', append=True).unstack()
  2. df1.columns = df1.columns.map('_'.join)

结果:

  1. # print(df1)
  2. HappyCustomerCount_False HappyCustomerCount_True
  3. DATE
  4. 2015-02-24 4 2
  5. 2015-02-25 6 1
  6. 2015-02-26 3 2

相关问题