2017-06-27 2 views
1

Ich habe Daten in einem Format ähnlich dem von df (siehe unten). Mein Problem ist jetzt, dass ich die Daten in avg_value mit dem Durchschnittswert für die letzten "days_back" Tage füllen möchte.Aktualisierung eines Teils der Spalte im Pandas-Datenrahmen mit einem Numpy-Array

import numpy as np 
import pandas as pd 

df = pd.DataFrame({ 'DAY': np.append(np.ones(24), 
           [np.multiply(np.ones(24), 2), 
            np.multiply(np.ones(24), 3), 
            np.multiply(np.ones(24), 4)]), 
       'value': np.random.randn(1, 24*4)[0], 
       'avg_value': 0.}, 
       index=pd.date_range('20150101', periods=24*4, freq="H")) 

print(df.tail()) 
        DAY avg_value  value 
2015-01-04 19:00:00 4.0  0.0 0.685153 
2015-01-04 20:00:00 4.0  0.0 0.670713 
2015-01-04 21:00:00 4.0  0.0 -0.519541 
2015-01-04 22:00:00 4.0  0.0 0.795619 
2015-01-04 23:00:00 4.0  0.0 -0.150966 

von R kommen, wäre dies eine einfache Sache zu tun .. Aber wenn ich versuche

df.loc[df["DAY"] == the_day_I_want].avg_value = my_numpy_array 

I

A value is trying to be set on a copy of a slice from a DataFrame. 
Try using .loc[row_indexer,col_indexer] = value instead 

, als guter Junge So erhalten zu tun Ich bin, ich fahre mit dem folgenden

index_row = df.loc[df["DAY"] == the_day_I_want].index 
index_col = df.columns.get_loc("avg_value") 
df.loc[index_row, index_col] = my_numpy_array 
fort

Aber ich habe immer noch den gleichen Fehler! Ich wette, es gibt eine wirklich einfache Lösung für dieses Problem, aber ich kann es einfach nicht finden:/Jede Hilfe wäre sehr willkommen!

Antwort

1

Sie wirklich in der Nähe sind, müssen Spalte in loc angeben:

df.loc[df["DAY"] == the_day_I_want].avg_value = my_numpy_array 

was gleich ist wie:

df.loc[df["DAY"] == the_day_I_want]['avg_value'] = my_numpy_array 

Änderung:

df.loc[df["DAY"] == the_day_I_want, 'avg_value'] = my_numpy_array 

Und warum es müssen besser erklären returning a view versus a copy

+0

Danke, Mann! Funktioniert wie ein Charme :) Ich kann nicht glauben, dass ich war so nah die ganze Zeit -.- – Murrmel5

+1

Ich denke, es ist super, Sie war in der Nähe, nicht notwendig, ändern Sie eine Menge Code;) Schönen Tag und froh kann helfen! – jezrael

Verwandte Themen