在Pandas数据框中应用功能的问题

时间:2018-06-29 04:07:42

标签: python pandas function dataframe

嗨,我有以下功能来决定获胜者:

def winner(T1,T2,S1,S2,PS1,PS2):
    if S1>S2:
        return T1        
    elif S2>S1:
        return T2
    else:
        #print('Winner will be decided via penalty shoot out')
        Ninit = 5
        Ts1 = np.sum(np.random.random(size=Ninit))*PS1
        Ts2 = np.sum(np.random.random(size=Ninit))*PS2
        if Ts1>Ts1:
            return T1
        elif Ts2>Ts1:
            return T2
        else:
            return 'Draw'

我有以下数据框:

df = pd.DataFrame()
df['Team1']   = ['A','B','C','D','E','F']
df['Score1']  = [1,2,3,1,2,4]
df['Team2']   = ['U','V','W','X','Y','Z']
df['Score2']  = [2,2,2,2,3,3]
df['Match']   = df['Team1']  + ' Vs '+ df['Team2']
df['Match_no']= [1,2,3,4,5,6]
df ['P1'] = [0.8,0.7,0.6,0.9,0.75,0.77]
df ['P2'] = [0.75,0.75,0.65,0.78,0.79,0.85]

我想创建一个新列,其中将分配每场比赛的获胜者。 为了确定每场比赛的获胜者,我使用了功能 winner 。我使用任意输入测试了该功能。有用。当我使用数据框时,

如下:

df['Winner']= winner(df.Team1,df.Team2,df.Score1,df.Score2,df.P1,df.P2)

它向我显示了以下错误:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

谁能告诉我为什么有错误? 谢谢

Zep。

1 个答案:

答案 0 :(得分:1)

您的功能未设置为将pandas.Series作为输入。使用其他方式。

public static void Main()
{ 
    int row=0 , col=0;
    int[,] array = new int[,]
    {
     { 1, 2, 3 },
     { 4, 5, 6 }, 
     { 7, 8, 9 },
     { 10, 11, 12 } 
    };

    int flag=0;

    for (int i = 0; i < array.Rank; i++)
    {
                if(flag==0)
                {
        row= array.GetLength(i);
                    flag=1;
                }
                else
                {

         col= array.GetLength(i);       
                }

        }

    Dictionary<int,int[,]> dictionary = new Dictionary<int, int[,]>();

    for(int i=0;i<row;i++)
    {

        dictionary.Add(array[i,0],new int[, ]{{array[i,1]},{array[i,2]}});

    }

    Console.WriteLine(dictionary[4].GetValue(0,0));

}

另一种解决方法

df['Winner'] = [
    winner(*t) for t in zip(df.Team1, df.Team2, df.Score1, df.Score2, df.P1, df.P2)]

df

  Team1  Score1 Team2  Score2   Match  Match_no    P1    P2 Winner
0     A       1     U       2  A Vs U         1  0.80  0.75      U
1     B       2     V       2  B Vs V         2  0.70  0.75      V
2     C       3     W       2  C Vs W         3  0.60  0.65      C
3     D       1     X       2  D Vs X         4  0.90  0.78      X
4     E       2     Y       3  E Vs Y         5  0.75  0.79      Y
5     F       4     Z       3  F Vs Z         6  0.77  0.85      F