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

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

我有以下Dataframe:

import pandas as pd
import numpy as np

np.random.seed(0)
daytime = pd.date_range('2015-02-24', periods=6, freq='d')
df = pd.DataFrame({'DATE': ['2015-02-24', '2015-02-24', '2015-02-25', '2015-02-25', '2015-02-26', '2015-02-26'],  
                   'HappyCustomer': ['True', 'False','True', 'False','True', 'False'],
                   'HappyCustomerCount': [2, 4,1, 6, 2, 3] }) 

df.set_index('DATE', inplace=True)

df.head(6)

    HappyCustomer   HappyCustomerCount
DATE        
2015-02-24  True    2
2015-02-24  False   4
2015-02-25  True    1
2015-02-25  False   6
2015-02-26  True    2
2015-02-26  False   3

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

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

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

uz75evzq

uz75evzq1#

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

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

结果:


# print(df1)

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

相关问题