Как добавить числа в пустой столбец dataframe из условного цикла for - PullRequest
0 голосов
/ 16 февраля 2019

Я создал новый столбец для каждого состояния (есть только 3 различных состояния) с пустыми значениями в каждой строке.Я использую цикл for для обхода исходного столбца «State», и если условие выполняется для состояния, которое я хочу, значение 1 помещается в соответствующую строку столбца «New York», например

for i in states:
        if i == "New York":
            dataset["New York"].replace("", 1)

Я ожидаю увидеть 1 в столбце Нью-Йорка в соответствующем месте в столбце «Штат», где значение «Нью-Йорк», но все, что он возвращает, это 0 с

Ответы [ 2 ]

0 голосов
/ 16 февраля 2019

Похоже, вы хотите использовать горячее кодирование.Есть несколько способов сделать это:

  1. Использовать pd.get_dummies :

    one_hot_df = pd.get_dummies(orig_df['States'])
    

    Чтобы объединить это с исходным фреймом данных:

    orig_df.join(one_hot_df)
    
  2. Используйте OneHotEncoder от sklearn :

    Если у вас могут появиться новые данные для кодирования в будущем (например, когда вы хотите кодироватьнабор данных для тестирования) sklearn.preprocessing.OneHotEncoder также пригодится.

0 голосов
/ 16 февраля 2019

Хорошо, возможно, это не оптимальное решение в вычислительных затратах, но вы можете использовать только функцию iterrows:

import pandas as pd


df1 = pd.DataFrame(columns=["OrginalState","State1","State2", "State3"])

df1.loc[0] = ["State1",None,None,None]
df1.loc[1] = ["State2",None,None,None]
df1.loc[2] = ["State3",None,None,None]

for index, row in df1.iterrows():
    if(row["OrginalState"] == "State1"):
        df1.loc[index]["State1"] = 1
    if(row["OrginalState"] == "State2"):
        df1.loc[index]["State2"] = 1
    if(row["OrginalState"] == "State3"):
        df1.loc[index]["State3"] = 1

print df1

Вывод:

  OrginalState State1 State2 State3
0       State1      1   None   None
1       State2   None      1   None
2       State3   None   None      1
...