2017-09-21 12 views
1

J'essaye de l'obtenir de sorte que comme je boucle sur une liste de choses que je peux ajouter dans une dataframe la quantité reçue de chaque entrepôt à une certaine date.ajouter à un dataframe comme je vais avec l'index datetime

Quand j'essayez ce qui suit, il ne fonctionne pas:

if inv['prod'] not in self.inventory.columns: 
    ## add row in 
    self.inventory[inv['prod']] = 0 
    idx = inv['time_stamp'].split(' ')[0] 
    if idx not in self.inventory.index: 
     self.inventory[idx, :] = 0 

    self.inventory[idx, inv['prod']] += inv['qty'] 

J'ai besoin essentiellement pour ajouter une colonne en fonction de chaque produit et la date de l'arrivée/vendu. Je sais que ce n'est pas très pythonique mais il suffit de le prendre pour que je ne connaisse pas à l'avance les dates ou les produits à l'avance.

trame de données

ressemblera à ceci d'ici la fin:

Date   InventoryA  InventoryB 
2017-01-01  10    NaN 
2017-01-02  NaN    NaN 
2017-01-03  NaN    5 
2017-01-04  NaN    5 
2017-01-05  -5    NaN 
2017-01-06  NaN    -10 
2017-01-07  15    NaN 
2017-01-08  NaN    NaN 
2017-01-09  -20    NaN 
+0

Avez-vous des données de test, comme ce que 'inv' est? Je suppose qu'il existe un moyen plus simple de convertir en données que de boucler. –

+0

Il est très déroutant de comprendre votre structure de données. – GiantsLoveDeathMetal

+0

@ken syme Il n'y a pas de façon plus simple de convertir la trame de données car je n'ai pas la totalité des données que je reçois des messages individuels comme ils viennent; c'est pourquoi j'ai dit dans la question que nous devons boucler comme tel – bpython

Répondre

2

Supposons que votre dataframe initiale ressemble à ceci:

data = {'InventoryA': [10, np.nan, -5]} 
df = pd.DataFrame(data, index=pd.to_datetime(['2017-01-01', '2017-01-03', '2017-01-05'])) 

Maintenant, vous voulez ajouter une nouvelle valeur (pas sûr de ce que vous formez-vous le vouloir, mais ici, il se trouve dans un dataframe):

new_vals = pd.DataFrame({'InventoryB': 10}, index=pd.to_datetime(['2017-01-02'])) 

# Add new column if it doesn't exist. 
if new_vals.columns.values not in df.columns.values: 
    df[new_vals.columns.values[0]] = np.nan 

# Add new row if it doesn't exist or add value if it does. 
if new_vals.index not in df.index: 
    df = df.append(new_vals) 
else: df.loc[new_vals.index, new_vals.columns] += new_vals 

# Sort by date 
df = df.sort_index(axis=0)