2017-07-22 4 views
1

Ich bin neu in Pandas.I will die Zahlen in den Spalten ersetzen auf Monatszähler Spalte in jeder Zeile jeInhalt in Spalten in jeder Zeile, je nach Zustand in einer anderen Spalte Ersetzen (Pandas)

CROSS (PUT X) auf die Spalten Werte in Abhängigkeit von MONTH_COUNTER

IF MONTH_COUNTER 1 ist eine Quer KEINE KOLUMNE:

2 CROSS DEC,JAN: 
3 CROSS DEC,JAN,FEB: 
4 CROSS DEC,JAN,FEB,MARCH: 
5 CROSS DEC,JAN,FEB,MARCH,APRIL: 
6 CROSS DEC,JAN,FEB,MARCH,APRIL 

Meine Datenrahmen Millionen von Zeilen hat Dies ist ein Beispiel (Binary Aktivität)

DEC JAN FEB MARCH APRIL MAY Month_Counter 
0 0 0 0  1  0 1    3 
1 0 0 1  1  0 1    3 
2 0 0 0  0  1 1    5 
3 1 0 0  0  1 1    1 
4 0 1 1  1  1 1    1 
5 0 1 1  1  1 0    2 
6 1 1 0  0  0 0    1 
7 0 0 0  0  0 1    6 
8 1 0 0  1  0 0    1 
9 0 0 0  1  1 0    4 

Das sind meine beiden Funktionen (Stike + Strike1), aber sie alle kreuzen ganzen Monat, wenn ich die Funktion aufrufen

def Strike(df): 
df['Month_Counter']= df['Month_Counter'].astype(int) 
m=df['Month_Counter'].tolist() 
n=[i for i,val in enumerate(m)] 
k= pd.Series([m[i] for i in n]) 
s=(k.size)-1 
for i in range(df.shape[0]): 
    for j in range(0,s): 
     if k[j]>1: 
      df.iloc[:,0:k[j]]=df.replace(df.iloc[:,0:k[j]],'X') 
return df 

def Strike1(df): 
Month_Counter = df['Month_Counter'].tolist() 

for i in Month_Counter: 
    if i > 1 : 
     df=df.replace(df.iloc[:,0:i],'X') 
return df 
df1=Strike(df1) 

Druck df1.head (20) .to_string()

sie produzieren Die folgenden Ergebnisse helfen mir bitte, wo irre ich ??

DEC JAN FEB MARCH APRIL MAY Month_Counter 
0 X X X  X  X X    3 
1 X X X  X  X X    3 
2 X X X  X  X X    5 
3 X X X  X  X X    1 
4 X X X  X  X X    1 
5 X X X  X  X X    2 
6 X X X  X  X X    1 
7 X X X  X  X X    6 
8 X X X  X  X X    1 
9 X X X  X  X X    4 

Dies ist die Ausgabe I

wollen
DEC JAN FEB MARCH APRIL MAY Month_Counter 
0 X X X  1  0 1    3 
1 X X X  1  0 1    3 
2 X X X  X  X 1    5 
3 1 0 0  0  1 1    1 
4 0 1 1  1  1 1    1 
5 X X 1  1  1 0    2 
6 1 1 0  0  0 0    1 
7 X X X  X  X X    6 
8 1 0 0  1  0 0    1 
9 X X X  X  1 0    4 

Antwort

1

ich denke, das es hier

df1 = pd.DataFrame({'DEC':[0,1,0,0,0,1,1,0,0,1],'JAN':[0,1,1,0,0,1,1,1,0,0],'FEB':[0,1,0,0,1,1,1,1,0,1],'MAR':[0,1,0,0,1,1,1,1,0,1],"Month_Counter":[3,3,2,1,1,2,1,2,1,3]}) 


for i in range(len(df1["Month_Counter"])): 
    for j in range(df1.loc[i, "Month_Counter"]): 
     if int(df1.loc[i,"Month_Counter"]) > 1: 
      df1.iloc[i,j]=str(df1.iloc[i,j]) 
      df1.iloc[i, j]="X" 

DEC FEB JAN MAR Month_Counter 
0 X X X 0    3 
1 X X X 1    3 
2 X X 1 0    2 
3 0 0 0 0    1 
4 0 1 0 1    1 
5 X X 1 1    2 
6 1 1 1 1    1 
7 X X 1 1    2 
8 0 0 0 0    1 
9 X X X 1    3 
+0

Danke, ich mag auch die Anzahl von aufeinanderfolgenden Nullen in einem zählen Zeile nach dem Überqueren der diese Monat, versuche ich zu verwenden Schichtfunktion ich scheitern, wie in Zeile 3, 3 Nullen, Zeile 6, 2 Nullen, Zeile 8 2 Nullen –

1

Die Antwort tun sollten, ist:

for i in range(0,len(df.columns)): 
    df.iloc[:,i] = np.where(df['Month_Counter'] >= i + 1, 'X', df.iloc[:,i]) 

Vorher:

APR DEC FEB JAN MAR MAY Month_Counter 
0 0 0 0 0 1 1    3 
1 0 0 1 0 1 1    3 
2 1 0 0 0 0 1    5 
3 1 1 0 0 0 1    1 
4 1 0 1 1 1 1    1 
5 1 0 1 1 1 0    2 
6 0 1 0 1 0 0    1 
7 0 0 0 0 0 1    6 
8 0 1 0 0 1 0    1 
9 1 0 0 0 1 0    4 

Nach:

DEC FEB JAN MAR MAY  Month_Counter 
0 X X X 0 1 1    3 
1 X X X 0 1 1    3 
2 X X X X X 1    5 
3 1 1 0 0 0 1    1 
4 1 0 1 1 1 1    1 
5 X X 1 1 1 0    2 
6 0 1 0 1 0 0    1 
7 X X X X X X    6 
8 0 1 0 0 1 0    1 
9 X X X X 1 0    4 
+0

Danke, ich möchte auch die Anzahl der aufeinander folgenden Nullen in einer Reihe nach dem Überschreiten der diesen Monat zählen, versuche, Shift-Funktion verwenden, die ich fehl, wie in Zeile 3, 3 Nullen, Zeile 6, 2 Nullen, Zeile 8 2 Nullen –

0

Vielen Dank all dies auch für mich gearbeitet

def Strike(df): 
df['Month_Counter']= df['Month_Counter'].astype(int) 
m=df['Month_Counter'].tolist() 
n=[i for i,val in enumerate(m)] 
k= pd.Series([m[i] for i in n]) 
for i in range(df.shape[0]): 
    if k[i]>1: 
     df.loc[[i],0:k[i]]=df.replace(df.iloc[:,0:k[i]],'X') 
return df 
Verwandte Themen