Pandas:将逗号分隔的列转换为多列
Pandas: pivot comma delimited column into multiple columns
我有以下 Pandas DataFrame:
import pandas as pd
import numpy as np
df = pd.DataFrame({'id': [1, 2, 3, 4], 'type': ['a,b,c,d', 'b,d', 'c,e', np.nan]})
我需要根据逗号分隔符拆分类型列并将值旋转到多个列中以获得此
我查看了有关 pivot() 的 Pandas 文档,还搜索了 Whosebug。我没有找到任何似乎可以(直接或间接)实现我在这里需要做的事情的东西。有什么建议吗?
已编辑:
enke 的解决方案适用于 Pandas 1.3.5。但是,它不适用于最新版本 1.4.1。这是屏幕截图:
你可以使用str.get_dummies
来获取虚拟变量;然后 join
回到 df
:
out = df[['id']].join(df['type'].str.get_dummies(sep=',').add_prefix('type_').replace(0, float('nan')))
输出:
id type_a type_b type_c type_d type_e
0 1 1.0 1.0 1.0 1.0 NaN
1 2 NaN 1.0 NaN 1.0 NaN
2 3 NaN NaN 1.0 NaN 1.0
3 4 NaN NaN NaN NaN NaN
我有以下 Pandas DataFrame:
import pandas as pd
import numpy as np
df = pd.DataFrame({'id': [1, 2, 3, 4], 'type': ['a,b,c,d', 'b,d', 'c,e', np.nan]})
我需要根据逗号分隔符拆分类型列并将值旋转到多个列中以获得此
我查看了有关 pivot() 的 Pandas 文档,还搜索了 Whosebug。我没有找到任何似乎可以(直接或间接)实现我在这里需要做的事情的东西。有什么建议吗?
已编辑:
enke 的解决方案适用于 Pandas 1.3.5。但是,它不适用于最新版本 1.4.1。这是屏幕截图:
你可以使用str.get_dummies
来获取虚拟变量;然后 join
回到 df
:
out = df[['id']].join(df['type'].str.get_dummies(sep=',').add_prefix('type_').replace(0, float('nan')))
输出:
id type_a type_b type_c type_d type_e
0 1 1.0 1.0 1.0 1.0 NaN
1 2 NaN 1.0 NaN 1.0 NaN
2 3 NaN NaN 1.0 NaN 1.0
3 4 NaN NaN NaN NaN NaN