在 Pandas 中透视两列特征表

数据挖掘 数据挖掘 特征提取 熊猫
2021-09-24 13:59:42

如何将以下 DataFrame 转换为一个以城市为行,每种美食为一列,1 或 0 作为值(如果城市有这种美食,则为 1)的数据框?

我认为这是将数据转换为机器学习特征的一个非常普遍的问题。

我知道 Pandas pivot_table 功能,但它要求一个值列,在这种情况下我们没有。

import pandas as pd

data = {
    'city': ['NY','NY', 'SF','SF','SF'],
    'cuisine': ['Japanese', 'Chinese', 'French', 'Japanse', 'German']
}

df = pd.DataFrame(data)
2个回答

如果没有值列 - 自己介绍!

df["value"]=1
pd.pivot_table(df, values="value", index=["city"], columns="cuisine", fill_value=0) 

对于你的例子,我得到了(在将“Japanse”中的错误打印修复为“Japanese”之后)

cuisine  Chinese  French  German  Japanese
city                                      
NY             1       0       0         1
SF             0       1       1         1

这是一种更pythonic的方式:

df.pivot_table(index=["city"], columns="cuisine", aggfunc=lambda x: 1, fill_value=0)

这是一个迟到的答案,但它适用于遇到同样问题的人。