从Pivoted Panda Dataframe获取列名,不包含原始列表的列名

时间:2016-12-07 06:53:24

标签: python pandas pivot-table

我有一个数据集:

a   b   c
99-01-11    8   367235
99-01-11    5   419895
99-01-11    1   992194
99-03-23    4   419895
99-04-30    1   992194
99-06-02    9   419895
99-08-08    2   367235
99-08-12    3   419895
99-08-17    10  992194
99-10-22    3   419895
99-12-04    4   992194
00-03-04    2   367235
00-09-29    9   367235
00-09-30    9   367235

我使用以下代码将其更改为数据透视表:

df = (pd.read_csv('orcs.csv'))

df_wanted = pd.pivot_table(

df,

index=['c'],

columns=['a'],

values=['b']

)}

我的目标:我正在尝试获取数据透视表中的列名列表。换句话说,我试图得到这个:

[ '1999年1月11日', '1999年1月11日', '1999年1月11日', '1999年3月23日', '1999-04-30','1999年6月2日”, '1999年8月8日']

我试图使用这段代码:

y= df_wanted.columns.tolist()

..但这给了我一个包含原始列名和数据透视新列名的列表:
[('c','00 -03-04'),('c','00 -09-29'),('c','00 -09-30'),('c','99 -01-11'),('c','99 -03-23'),('c','99 -04-30'),('c','99 -06-02'),( 'c','99 -08-08'),('c','99 -08-12'),('c','99 -08-17'),('c','99 -10 -22'),('c','99 -12-04')]

我尝试以各种方式删除'c',例如

def remove_values_from_list(the_list, val):
        while val in the_list:
            the_list.remove(val)
remove_values_from_list(y, 'c')

但没有运气。有谁知道如何解决这个问题? PS。保留列表的顺序很重要,因为我将把它用作折线图的y值数组。

非常感谢。

1 个答案:

答案 0 :(得分:1)

最好在[]中首先省略pivot_table以避免列中的MultiIndex,然后将tolist()与强制转换为string

df_wanted = pd.pivot_table(df,index='c',columns='a',values='b')
#print (df_wanted)

print (df_wanted.columns.astype(str).tolist())
['1999-01-11', '1999-03-23', '1999-04-30', '1999-06-02', '1999-08-08', 
'1999-08-12', '1999-08-17', '1999-10-22', '1999-12-04',
 '2000-03-04', '2000-09-29', '2000-09-30']