我的输入数据是-
"Name" : ["Alice", "Bob", "Jake", "Jake", "Steve" , "Bob"] ,
"City" : ["Seattle", "Seattle", "Portland", "Seattle", "Seattle", "Portland"],
"CityID" : ["1", "1", "2", "1", "1", "2"]
} )
打印时显示为:
City Name CityID
0 Seattle Alice 1
1 Seattle Bob 1
2 Portland Jake 2
3 Seattle Jake 1
4 Seattle Steve 1
5 Portland Bob 2
我正在尝试得到这样的东西-
City CityID Alice Bob Jake Steve
0 Seattle 1 True True True True
1 Portland 2 False True True False
我不确定如何到达这里。 我确实尝试过groupby函数
df.groupby(['City','CityID', 'Name']).first()
这使我明白了这一点-
City CityID Name
Seattle 1 Alice
Bob
Jake
Portland 2 Bob
Jake
Steve
我不确定此后如何进行,任何提示都会有很大帮助。
答案 0 :(得分:1)
将get_dummies
与dtype=bool
参数一起使用,MultiIndex
中max
中具有唯一值:
df = (pd.get_dummies(df.set_index(['City','CityID'])['Name'], dtype=bool)
.max(level=[0,1])
.reset_index())
print (df)
City CityID Alice Bob Jake Steve
0 Seattle 1 True True True True
1 Portland 2 False True True False
如果需要groupby
解决方案,请创建新列,并用DataFrame.assign
用True
填充,使用GroupBy.first
,用Series.unstack
整形,最后转换MultiIndex
到DataFrame.reset_index
的列中,DataFrame.rename_axis
用于删除列名a
:
df = (df.assign(a=True)
.groupby(['City','CityID', 'Name'], sort=False)['a']
.first()
.unstack(fill_value=False)
.reset_index()
.rename_axis(None, axis=1))
print (df)
City CityID Alice Bob Jake Steve
0 Seattle 1 True True True True
1 Portland 2 False True True False