我有一个如下所示的数据集。
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中使用最新版本。
答案 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()
我遇到了相同的错误,并使用上述更正进行了纠正。
谢谢。