Python 使用pandas将字符串列更改为多个布尔列

Python 使用pandas将字符串列更改为多个布尔列,python,pandas,Python,Pandas,我有一个两列的数据集,我想对其进行重塑。 看看这个假df: df=pd.DataFrame([ ['Alex', 'Apple'],['Bob', 'Banana'],['Clark', 'Citrus'], ['Diana', 'Banana'], [ 'Elisa', 'Apple'], ['Frida', 'Citrus'], ['George', 'Citrus'], ['Hanna', 'Banana'] ],columns=['Name', 'Fruit']) 我想有四个专

我有一个两列的数据集,我想对其进行重塑。
看看这个假df:

df=pd.DataFrame([
    ['Alex', 'Apple'],['Bob', 'Banana'],['Clark', 'Citrus'], ['Diana', 'Banana'], [
'Elisa', 'Apple'], ['Frida', 'Citrus'], ['George', 'Citrus'], ['Hanna', 'Banana']
],columns=['Name', 'Fruit'])
我想有四个专栏;名称、苹果、香蕉和柑橘,其中后者三个为布尔值(对/错)。
我看起来很不稳定,但这并不是我想要的

您可以使用以下选项:

df[['Name']].join(pd.get_dummies(df.Fruit).astype(bool))

     Name  Apple  Banana  Citrus
0    Alex   True   False   False
1     Bob  False    True   False
2   Clark  False   False    True
3   Diana  False    True   False
4   Elisa   True   False   False
5   Frida  False   False    True
6  George  False   False    True
7   Hanna  False    True   False

我认为这应该是
get\u dummies
的一个很好的用例:

df.set_index('Name')['Fruit'].str.get_dummies().astype(bool).reset_index()

     Name  Apple  Banana  Citrus
0    Alex   True   False   False
1     Bob  False    True   False
2   Clark  False   False    True
3   Diana  False    True   False
4   Elisa   True   False   False
5   Frida  False   False    True
6  George  False   False    True
7   Hanna  False    True   False

同样地,我们有

pd.concat([df['Name'], df['Fruit'].str.get_dummies().astype(bool)], axis=1)

     Name  Apple  Banana  Citrus
0    Alex   True   False   False
1     Bob  False    True   False
2   Clark  False   False    True
3   Diana  False    True   False
4   Elisa   True   False   False
5   Frida  False   False    True
6  George  False   False    True
7   Hanna  False    True   False

看起来
crosstab
很好

pd.crosstab(df.Name,df.Fruit).astype(bool).reset_index()
Out[90]: 
Fruit    Name  Apple  Banana  Citrus
0        Alex   True   False   False
1         Bob  False    True   False
2       Clark  False   False    True
3       Diana  False    True   False
4       Elisa   True   False   False
5       Frida  False   False    True
6      George  False   False    True
7       Hanna  False    True   False

我知道我们有相同的想法+1@coldspeed是的D+1d你的牙齿谢谢你!你们俩都跑得很快:)@Mactilda没问题。干杯伟大的谢谢-对python还是新手(我是一个r女孩)。你不知道如何从新的df中创建矩阵,其中True/false为1/0?@Mactilda只需从我的代码中删除
astype(bool)
。由于您提到布尔值,我假设您想要True/False,但是将结果表示为0/1s更简单。谢谢!我知道如何删除第一列。我是否也可以删除列标题以使其成为矩阵?@Mactilda只需为一个矩阵执行
df.values
matrix@Mactilda或者,我有一个解释如何将数据帧转换为矩阵的答案。