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

标签 python pandas loops

我有以下 pandas 数据框:

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

我需要将这个集合转换为如下所示,我通常手动执行,但是这次我在状态中有很多值,我的目标是将它们放在包含 yes 和 no 的列中。在 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

最佳答案

使用get_dummiesreplace对于 NY:

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

关于python - 为行中的每个值创建一个新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48165710/

相关文章:

python - 如何使用 Pandas CDay 查找日期之间的工作日?

javascript - 在 Angular 模板中循环遍历 Javascript 对象和子对象

java - 组合发电机

c++ - C++过滤掉数组中的重复值

python - 如何在 Haskell 中重新实现这个 Python XML 解析函数?

python - 在 Python 中读取当前迭代器值而不递增

python - Pandas 对字符串的列过滤给出了意想不到的结果

python - 如何保持我的类(class)输出相同而不重复?

python - 如何在matplotlib中设置刻度之间的固定间距

python - 从 pandas 数据框中保存的分组数据有效地创建大量直方图