在复杂列上使用 pandas 映射
use pandas map on a complex column
这是我的 csv 的样子
time
cause
23
a / b / c
42
c / d / a / b
12
a / d / e
98
c / b / e / d
这是我想要实现的输出
time
a
b
c
d
e
23
1
1
1
0
0
42
1
1
1
1
0
12
1
1
0
0
1
98
0
1
1
1
1
我的真实数据要大得多,但这个例子应该能帮我找到我要找的东西。我不知道如何使用 map 函数检查每个单元格中的多个可能值。
可以使用str.get_dummies
和join
回到原来的dataframe:
df[['time']].join(df['cause'].str.get_dummies(sep=' / '))
或使用pop
修改原始数据帧:
df = df.join(df.pop('cause').str.get_dummies(sep=' / '))
输出:
time a b c d e
0 23 1 1 1 0 0
1 42 1 1 1 1 0
2 12 1 0 0 1 1
3 98 0 1 1 1 1
这是我的 csv 的样子
time | cause |
---|---|
23 | a / b / c |
42 | c / d / a / b |
12 | a / d / e |
98 | c / b / e / d |
这是我想要实现的输出
time | a | b | c | d | e |
---|---|---|---|---|---|
23 | 1 | 1 | 1 | 0 | 0 |
42 | 1 | 1 | 1 | 1 | 0 |
12 | 1 | 1 | 0 | 0 | 1 |
98 | 0 | 1 | 1 | 1 | 1 |
我的真实数据要大得多,但这个例子应该能帮我找到我要找的东西。我不知道如何使用 map 函数检查每个单元格中的多个可能值。
可以使用str.get_dummies
和join
回到原来的dataframe:
df[['time']].join(df['cause'].str.get_dummies(sep=' / '))
或使用pop
修改原始数据帧:
df = df.join(df.pop('cause').str.get_dummies(sep=' / '))
输出:
time a b c d e
0 23 1 1 1 0 0
1 42 1 1 1 1 0
2 12 1 0 0 1 1
3 98 0 1 1 1 1