2017-12-20 4 views
1
import pandas as pd 
import quandl 
import numpy as np 
import matplotlib.pyplot as plt 
from matplotlib import style 
style.use("fivethirtyeight") 
df_2010=pd.read_csv("c:/users/ashub/downloads/documents/MLB 2010.csv",index_col=0) 
#print(df_2010) 
sliced_data=df_2010[["Home Team","Away Team","Home Score","Away Score"]] 
#print(sliced_data) 
for win in sliced_data: 
    flag1=sliced_data["Home Team"]+str("index") 
    flag2=sliced_data["Away Team"]+str("index") 
    print(sliced_data["Home Score"],sliced_data["Away Score"]) 
    if sliced_data["Home Score"]>sliced_data["Away Score"]: 
     df_2010=df_2010.join([1,0],index=[flag1,flag2]) 
    else: 
     df_2010=df_2010.join([0,1],index=[flag1,flag2]) 
df_2010.to_html("c:/users/ashub/desktop/ashu.html") 

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().Wie zwei Datenframes Spalten vergleichen?

Der Fehler ist bei, wenn die Bedingung, wenn ich die Partitur Heimmannschaft bin im Vergleich zu und weg team.What ich tun möchte, ist eine Spalte in die CSV-Datei hinzufügen, die den Gewinn oder Verlust eines Teams auflistet , Gewinn ist 1 und Verlust ist Null, so dass ich den Gewinn eines bestimmten Teams in einer Saison hinzufügen und ihre Gewinnwahrscheinlichkeit berechnen und die Gewinnwahrscheinlichkeit in der nächsten Saison voraussagen kann.

+0

Können Sie Datenabtastwert hinzufügen? – jezrael

+0

https://docs.google.com/spreadsheets/d/1278lc1zanIKxIWzL6IH1ZzpqkjLeIP_m8Db_FxdBMZ4/edit?usp=sharing – Demonking28

+0

Bitte erläutern Sie genauer, was Sie zu erreichen versuchen. – displayname

Antwort

1

Ich glaube, Sie boolean Maske erstellen können vergleichen Spalten und dann neue Spalten zuweisen:

np.random.seed(123) 
sliced_data = pd.DataFrame([np.random.randint(0, 5, 5), 
        np.random.randint(0, 5, 5)], 
        index=['Home Score', 'Away Score']).T 

m = sliced_data['Home Score'] > sliced_data['Away Score'] 


sliced_data['Away Team index'] = (~m).astype(int) 
sliced_data['Home Team index'] = m.astype(int) 

print(sliced_data) 
    Home Score Away Score Away Team index Home Team index 
0   2   2    1    0 
1   4   3    0    1 
2   2   1    0    1 
3   1   1    1    0 
4   3   0    0    1 

Es ist die gleiche wie:

sliced_data['Away Team index'] = np.where(m, 0,1) 
sliced_data['Home Team index'] = np.where(m, 1,0) 

print(sliced_data) 
    Home Score Away Score Away Team index Home Team index 
0   2   2    1    0 
1   4   3    0    1 
2   2   1    0    1 
3   1   1    1    0 
4   3   0    0    1 
+0

aber dies wird immer 1 zu Hause Team zuweisen, während ich 1 zu gewinnen Team – Demonking28

+1

Ich teste es mit 'sliced_data = pd.DataFrame ([np.random.randint (0, 5, 5), np.random. randint (0, 5, 5)], index = ['Home-Score', 'Auswärts-Score']). T' und es funktioniert, vielleicht ein Problem in den Daten? – jezrael

+0

ok danke, schau hinein! – Demonking28

2

Sie können genau das tun:

df_2010['Win'] = df_2010['Home Score'] > df_2010['Away Score'] 

Sie werden diesen geschnittenen Datenrahmen nicht benötigen.

Hier ist ein vollständiges Beispiel:

import pandas as pd 
import numpy as np 

df = pd.DataFrame([np.random.randint(0, 5, 5), 
        np.random.randint(0, 5, 5)], 
        index=['Home Score', 'Away Score']).T 

print(df) 

df['Win'] = df['Home Score'] > df['Away Score'] 

print(df) 

die zu

Home Score Away Score 
0   3   3 
1   4   2 
2   4   1 
3   4   4 
4   4   2 

eine zusätzliche Spalte win wie folgt hinzufügen wird:

Home Score Away Score Win 
0   3   3 False 
1   4   2 True 
2   4   1 True 
3   4   4 False 
4   4   2 True 
Verwandte Themen