如何将pandas数据框的列中的所有值转换为具有计数的新列?



我有如下的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)

最新更新