在Python中使用动态名称在for循环中创建多个列表

时间:2018-09-05 11:57:07

标签: python pandas jupyter-notebook

我正在尝试找出数据集中多列的平均值和标准偏差,然后将它们另存为新数据框中的新列。也就是说,对于数据集中的每个``组'',我希望新数据框中的一列具有其平均值和SD。我想出了以下脚本,但无法动态命名。

Average_F1_S_list, Average_F1_M_list, SD_F1_S_list, SD_F1_M_list = ([] for i in range(4))
Groups= DF['GROUP'].unique().tolist()
for key in Groups:
    Average_F1_S = DF_DICT[key]['F1_S'].mean()
    Average_F1_S_list.append(Average_F1_S)

    SD_F1_S = DF_DICT[key]['F1_S'].std()
    SD_F1_S_list.append(SD_F1_S)

    Average_F1_M = DF_DICT[key]['F1_M'].mean()
    Average_F1_M_list.append(Average_F1_M)

    SD_F1_M = DF_DICT[key]['F1_M'].std()
    SD_F1_M_list.append(SD_F1_M)
df=pd.DataFrame({'Group':Groups,
            'Average_F1_S':Average_F1_S_list,'Standard_Dev_F1_S':SD_F1_S_list,
            'Average_F1_M':Average_F1_M_list,'Standard_Dev_F1_M':SD_F1_M_list}, 
                columns=['Group','Average_F1_S','Standard_Dev_F1_S','Average_F1_M', 'Standard_Dev_F1_M'])

这不是一个好的解决方案,因为功能太多。有什么办法可以动态创建列表?

1 个答案:

答案 0 :(得分:0)

这应该可以解决问题!希望这会有所帮助

# These are all the keys you want
key_names = ['F1_S', 'F1_M']

# Holds the data you want to pass to the dataframe.
df_info = {'Groups': Groups}


for group_name in Groups:

    # For each group in the groups, we iterate over all the keys we want.
    for key in key_names:

        # Generate a keyname that you want for your dataframe.
        avg_key_name = key + '_Average'
        std_key_name = key + '_Standard_Dev'

        if avg_key_name not in df_info:
            df_info[avg_key_name] = []
            df_info[std_key_name] = []

        df_info[avg_key_name].append(DF_DICT[group_name][key].mean())
        df_info[std_key_name].append(DF_DICT[group_name][key].std())

df = pd.DataFrame(df_info)