我在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'] 一些帮助将不胜感激
答案 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']