使用^{
import pandas as pd
df = pd.DataFrame({'A': ['a', 'b', 'a'],
'B': ['b', 'a', 'c']})
print(pd.get_dummies(df))
# A_a A_b B_a B_b B_c
# 0 1 0 0 1 0
# 1 0 1 1 0 0
# 2 1 0 0 0 1
到目前为止,还不错。但是如何将get_dummies()
与多索引列结合使用呢?默认行为不太实际:多索引元组被转换成字符串,并且应用与简单索引列相同的后缀机制。在
不过,我想得到的是,这些假人创建了一个新的列级别:
ret = pd.get_dummies(df, ???)
print(ret)
print(type(ret.columns[0]))
# i ii
# A B
# a b a b c
# 0 1 0 0 1 0
# 1 0 1 1 0 0
# 2 1 0 0 0 1
#
# tuple
#
# Note that the ret would be equivalent to the following:
# ('i','A','a') ('i','A','b') ('ii','B','a') ('ii','B','b') ('ii','B','c')
# 0 1 0 0 1 0
# 1 0 1 1 0 0
# 2 1 0 0 0 1
如何实现这一目标?在
更新:我在get_dummies
:https://github.com/pandas-dev/pandas/issues/26560中提出了一个特性请求,以更好地支持多索引数据帧
我也有类似的需求,但在一个更复杂的数据帧中,用多个索引作为行索引,而数字列不能转换为虚拟的。因此,我的案例需要扫描所有列,扩展到仅虚拟
dtype='object'
的列,并构建一个新的列索引,将列名称与伪变量和伪变量本身的值连接起来。这是因为我不想添加新的列索引级别。在这是密码 首先用我需要的格式构建一个数据帧 在
^{pr2}$下面是只显示对象列的代码
^{3}$它可以很容易地更改以响应原始用例,向列multi-index添加一行。在
^{8}$请注意,如果有数字列,它仍然有效-它只是在列索引中向它们添加一个空的额外级别。在
您可以分析列名并重命名它们:
请注意,此DataFrame与具有三级多索引列名的DataFrame不同。在
相关问题 更多 >
编程相关推荐