python: à l'aide .iterrows() pour créer des colonnes

Je suis en train d'utiliser une fonction de boucle pour créer une matrice de savoir si un produit a été vu dans une semaine particulière.

Chaque ligne de la df (d'un produit) a un close_date (la date à laquelle le produit fermé) et un week_diff (le nombre de semaines que le produit a été répertorié).

import pandas
mydata = [{'subid' : 'A', 'Close_date_wk': 25, 'week_diff':3},
          {'subid' : 'B', 'Close_date_wk': 26, 'week_diff':2},
          {'subid' : 'C', 'Close_date_wk': 27, 'week_diff':2},]
df = pandas.DataFrame(mydata)

Mon but est de voir comment de nombreux autres produits ont été répertoriés pour chaque produit dans chaque date_range

J'ai mis en place la boucle suivante:

for index, row in df.iterrows():
    i = 0
    max_range = row['Close_date_wk']    
    min_range = int(row['Close_date_wk'] - row['week_diff'])
    for i in range(min_range,max_range):
        col_head = 'job_week_'  +  str(i)
        row[col_head] = 1

Pouvez vous s'il vous plaît aider à expliquer pourquoi la "ligne[col_head] = 1" ligne n'est ni l'ajout d'une colonne, ni l'ajout d'une valeur à la colonne de la ligne.

Par exemple, si:

row A has date range 1,2,3 
row B has date range 2,3  
row C has date range 3,4,5'

ensuite, idéalement, je voudrais terminer avec

row A has 0 alternative products in week 1
          1 alternative products in week 2
          2 alternative products in week 3
row B has 1 alternative products in week 2
          2 alternative products in week 3
&c..
Je crois iterrows() est un Python Panda méthode sur un dataframe, qui est un type très précis de la structure de données. Ce n'est PAS un core Python méthode et ne peut être considérée comme un standard de Python structure de données (comme une liste ou un dictionnaire). Vous aurez beaucoup plus de chance d'obtenir de l'aide avec cette question si vous indiquez que c'est un Pandas question plutôt que juste un Python question.
Vous ne pouvez pas muter une df à l'aide de la row de iterrows, vous devez utiliser df.loc, df.iloc, df.ix
Donc, essayez row[col_head] = 1 à df.loc[row,col_head] = 1

OriginalL'auteur citydreams | 2015-07-16