数据框附加在Python中

时间:2018-04-01 14:41:47

标签: python pandas dataframe data-analysis

我在Python中有一个名为df1的数据框,如下所示:

    SYMBOL   prediction_succesful     DATE        VALUE
0    ABC         Y                  29-03-2018     100
1    DEF         Y                  30-03-2018      96
2    GHI         Y                  01-04-2018     105
3    ABC        NaN                 30-03-2018      55

我想创建另一个名为df3的数据框,其中包含名为符号,no_of_predictions和no_of_succesful_predictions 的3列 其中 no_of_predictions 包含符号列中每个值重复的次数,而 no_of_successful_predictions 包含的次数为predic_succesful中 Y 的值的次数 我尝试了以下代码,但它不起作用:

df3 = DataFrame(columns = ['symbol','no_of_predictions','no_of_successful_predictions'])

for i in unique_symbols:
    counter =  0
    counter2 = 0
    for j in df1:
        mask = df1[j].symbol == i
        if mask:
            counter += 1
            mask2 = df1[j].prediction_succesful
            if mask2 == "Y":
                counter2 += 1

    df3.append(['symbol'=i,'no_of_predictions' = counter,'no_of_successful_predictions' = counter2])

这里 df1 是我正在处理的主要数据框架 unique_symbols 是一个包含df1数据框中所有唯一符号的列表,例如unique_symbols = ['ABC','DEF','GHI'] 一些帮助将不胜感激

2 个答案:

答案 0 :(得分:1)

如果我理解正确,以下工作:

by_symbol = df1.groupby('SYMBOL')

df3 = pd.DataFrame({'no_of_predictions': by_symbol.size(),
      'no_successful_predictions': 
          by_symbol.apply(lambda x: (x['prediction_succesful']=='Y').sum())})

>>> df3
        no_of_predictions  no_successful_predictions
SYMBOL                                              
ABC                     2                          1
DEF                     1                          1
GHI                     1                          1

发生的事情是,您要按符号对数据帧进行分组,然后获取每个“子数据帧”的大小(用于no_of_predictions),最后是prediction_successful的行数。 1}} Y为最后一栏

答案 1 :(得分:1)

你可以让

df3 = df1.groupby('SYMBOL').prediction_succesful.aggregate([len, lambda x: (x == 'Y').sum()])
df3.columns = ['no_of_predictions', 'no_of_successful_predictions']