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或者,我有一个解释如何将数据帧转换为矩阵的答案。