Создайте новый фрейм данных, установив все фреймы данных в словаре с помощью цикла

#python #pandas

#python #pandas

Вопрос:

У меня есть словарь фреймов данных:

 two_season_bucket_suffixes = {'two_season_bucket_year1_racer_bio':two_season_bucket_year1_racer_bio,
'two_season_bucket_year1_spring_rate':two_season_bucket_year1_spring_rate,
'two_season_bucket_year1_neaps_rate':two_season_bucket_year1_neaps_rate,
'two_season_bucket_year1_spring_raw':two_season_bucket_year1_spring_raw,
'two_season_bucket_year1_neap_raw':two_season_bucket_year1_neap_raw,
'two_season_bucket_year1_opposing_team':two_season_bucket_year1_opposing_team,
'two_season_bucket_year1_opposing_team_distribution':two_season_bucket_year1_opposing_team_distribution,
'two_season_bucket_year1_stern_score':two_season_bucket_year1_stern_score,
'two_season_bucket_year1_bow_score':two_season_bucket_year1_bow_score,
'two_season_bucket_year1_team_score':two_season_bucket_year1_team_score,
'two_season_bucket_year2_racer_bio':two_season_bucket_year2_racer_bio,
'two_season_bucket_year2_spring_rate':two_season_bucket_year2_spring_rate,
'two_season_bucket_year2_neaps_rate':two_season_bucket_year2_neaps_rate,
'two_season_bucket_year2_spring_raw':two_season_bucket_year2_spring_raw,
'two_season_bucket_year2_neap_raw':two_season_bucket_year2_neap_raw,
'two_season_bucket_year2_opposing_team':two_season_bucket_year2_opposing_team,
'two_season_bucket_year2_opposing_team_distribution':two_season_bucket_year2_opposing_team_distribution,
'two_season_bucket_year2_stern_score':two_season_bucket_year2_stern_score,
'two_season_bucket_year2_bow_score':two_season_bucket_year2_bow_score,
'two_season_bucket_year2_team_score':two_season_bucket_year2_team_score}
  

все они имеют разные столбцы, но все они имеют по крайней мере один столбец, который начинается со слова «предсказание»

Я хотел бы создать новый фрейм данных из каждого столбца, который начинается с «предсказания»:

 two_season_bucket_prediction= pd.DataFrame()
counter = 0
for key, val in two_season_bucket_suffixes.items():
    if counter == 0:
        two_season_bucket_prediction= val[val.columns[pd.Series(val.columns).str.startswith('prediction')]]
    else:
        two_season_bucket_prediction= two_season_bucket_prediction.join(val[val.columns[pd.Series(val.columns).str.startswith('prediction')]])
        counter  = 1
  

каждый раз, когда я просто получаю фрейм данных с одним столбцом с именем ‘prediction’, хотя я уверен, что ни один столбец не называется только prediction

Ответ №1:

Вы увеличиваете счетчик там, где вы никогда не достигаете:

 two_season_bucket_prediction= pd.DataFrame()
counter = 0
for key, val in two_season_bucket_suffixes.items():
    if counter == 0:
        two_season_bucket_prediction= val[val.columns[pd.Series(val.columns).str.startswith('prediction')]]
    else:
        two_season_bucket_prediction= two_season_bucket_prediction.join(val[val.columns[pd.Series(val.columns).str.startswith('prediction')]])
    counter  = 1
  

Комментарии:

1. хорошо, поэтому я переместил счетчик на тот же отступ, что и if, но в итоге у меня все равно остался только один столбец в новом фрейме данных

2. Ваших исходных данных недостаточно, чтобы я мог помочь. Пожалуйста, обновите свой вопрос на. доступный для выполнения образец, чтобы я мог вам помочь.