如何将DataFrame的列重新排列为索引的二进制矩阵?
我正在尝试转换此数据框:
data_in = {
'dates': [2017, 2017, 2018, 2019, 2019, 2019],
'names': ['Roger', 'Rafa', 'Roger', 'Rafa', 'Novak', 'Dom']
}
df_in = pd.DataFrame(data_in)
>>> df_in
dates names
0 2017 Roger
1 2017 Rafa
2 2018 Roger
3 2019 Rafa
4 2019 Novak
5 2019 Dom
进入这个二元矩阵:
>>> df_out
Roger Rafa Novak Dom
dates
2017 1 1 0 0
2018 1 0 0 0
2019 0 1 1 1
将所有日期作为索引,所有名称作为列,如果名称出现在日期,则数据为 1,否则为 np.NaN 或 0。
我可以用它的索引和列来构建 df_out 数据框,但是你将如何获取数据?
回答
使用get_dummies与max对1如果再存在下去值0:
df = pd.get_dummies(df_in.set_index('dates')['names']).groupby(level=0).max()
print (df)
Dom Novak Rafa Roger
dates
2017 0 0 1 1
2018 0 0 0 1
2019 1 1 1 0