Pandas,Pivot错误 - 无法使用null键标记索引

时间:2016-12-30 12:57:00

标签: python pandas

我有一个如下所示的数据集。

ID     Product   date
1        A     01.01.2015  
1        B     01.01.2015  
1        C     01.03.2015  

一个人可以在同一天使用多个产品,我希望按ID,日期转换它,并将产品作为值。

ID日期col1 col2

1      01.01.2015   A      B
1      01.03.2015   C

在SAS中我会这样做:

proc transpose data = data;
  by ID Date;
  var product
run;

在熊猫中,我使用了以下代码。

data_b = data_a.pivot(index = ['patnum','day'], values = ['drug']).add_prefix('p')

这会产生以下错误。

ValueError: cannot label index with a null key

为什么我出现上述错误?我怎么能避免它?

我在Pandas中使用最新版本。

4 个答案:

答案 0 :(得分:4)

使用groupby

list个对象

df.groupby(['ID', 'date'])['Product'].apply(list)

ID  date      
1   01.01.2015    [A, B]
    01.03.2015       [C]
Name: Product, dtype: object
数据框的

df.groupby(['ID', 'date'])['Product'].apply(list).apply(pd.Series)

               0    1
ID date              
1  01.01.2015  A    B
   01.03.2015  C  NaN

答案 1 :(得分:1)

您需要创建另一列来标识每个日期中的行,以帮助您pivot

df.assign(Count = df.groupby('date').cumcount()).pivot("date", "Count", "Product")

#    Count  0      1
#date       
#01.01.2015 A      B
#01.03.2015 C   None

答案 2 :(得分:0)

一年后我遇到了同样的问题,将代码重新排列到以下解决了它:

pivot_df = pd.pivot_table(df, index =['coulmn1','coulmn2'])

是Python的新手,我不知道为什么会这样,我也不知道它的编码好坏,也不知道错误信息的原因我们都得到了......

答案 3 :(得分:0)

请使用DataFrame.pivot_table()代替DataFrame.pivot()

我遇到了相同的错误,并使用上述更正进行了纠正。

谢谢。