我有如下的pandas DataFrame:
df = pd.DataFrame({"person": ["Joe", "Jack", "Thomas", "Jack", "Joe", "Thomas"],
"fruit": ["apple", "apple", "banana", "orange", "banana", "banana"]})
我想将其转换为一个新的DataFrame,其中每行是一个人,一列是每种水果的计数(不同水果类型的数量非常小,并且事先已知)。
本例中期望的输出如下:
person apple banana orange
Joe 1 1 0
Jack 1 0 1
Thomas 0 2 0
这看起来那么简单,我知道它与旋转,但我在网上找不到任何的例子,在我的工作情况。如何解决这个问题?
Thanks in advance
这应该可以完成工作:
df = df.groupby(['person', 'fruit'])['fruit'].count().to_frame()
df = pd.crosstab(index=df.index.get_level_values('person'),
columns=df.index.get_level_values('fruit'),
aggfunc='sum',
values=df.values,
rownames=['person'],
colnames=['fruit']).fillna(0)