为一行中的每个值创建一个新列

时间:2018-01-09 10:05:17

标签: python pandas loops

我有以下pandas数据框:

name        state   postcode
coles       vic      2501
woolworth   nsw      3409
big w       act      3201
target      vic      1089

我需要将此设置转换为这样,我通常会手动执行,但这次我在状态中有很多值,而我的目标是将它们放在列中,是和否。在Stata我会循环,但在Python中我有点迷失。

name       state    postcode    VIC  NSW    ACT  NT
coles       VIC      2501        Y    N      N   N
woolworth   NSW      3409        N    Y      N   N
big w       ACT      3201        N    N      Y   N
target      NT       1089        N    N      N   Y

1 个答案:

答案 0 :(得分:2)

get_dummiesNY使用replace

df = df.join(pd.get_dummies(df['state']).replace({0:'N', 1:'Y'}))
print (df)
        name state  postcode act nsw vic
0      coles   vic      2501   N   N   Y
1  woolworth   nsw      3409   N   Y   N
2      big w   act      3201   Y   N   N
3     target   vic      1089   N   N   T

或转换为bool

df = df.join(pd.get_dummies(df['state']).astype(bool))
print (df)
        name state  postcode    act    nsw    vic
0      coles   vic      2501  False  False   True
1  woolworth   nsw      3409  False   True  False
2      big w   act      3201   True  False  False
3     target   vic      1089  False  False   True

或者,如果可能01值:

df = df.join(pd.get_dummies(df['state']))
print (df)
        name state  postcode  act  nsw  vic
0      coles   vic      2501    0    0    1
1  woolworth   nsw      3409    0    1    0
2      big w   act      3201    1    0    0
3     target   vic      1089    0    0    1