【问题标题】:Data frame append in PythonPython中的数据框追加
【发布时间】:2018-04-01 23:09:46
【问题描述】:

我在 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 的数据框,其中包含 3 个名为 symbol、no_of_predictions 和 no_of_succesful_predictions 的列 其中 no_of_predictions 包含每个值在符号列中重复的次数,no_of_successful_predictions 包含 prediction_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'] 一些帮助将不胜感激

【问题讨论】:

    标签: python pandas dataframe data-analysis


    【解决方案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 所在的行数Y 作为您的最后一栏

    【讨论】:

      【解决方案2】:

      你可以让

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

      【讨论】:

      • 另外你能说一下在这种情况下我该如何使用 append 方法。
      • @KasimPanjri:从你的问题来看,你为什么要这样做并不明显,因为这个创建了DataFrame 并一举添加了数据。如果要将结果与某些现有数据框合并,请查看例如pd.concat,参见。 pandas.pydata.org/pandas-docs/stable/merging.html
      猜你喜欢
      • 2018-05-14
      • 1970-01-01
      • 2019-09-21
      • 1970-01-01
      • 2018-04-19
      • 1970-01-01
      • 2014-10-20
      • 1970-01-01
      • 2021-04-21
      相关资源
      最近更新 更多