Я собираю данные из нескольких файлов CSV, где столбцы / строки одинаковы, за исключением разных лет. Я хочу сопоставить их и поместить в следующий формат, где каждое наблюдение будет сгруппировано по уникальному идентификатору и столбцу года, показывающему год, в который была записана каждая точка данных:
id year foo bar
100654 2010 0.043 0.045
2011 0.635 0.343
2012 0.523 0.325
2013 0.278 0.623
2014 0.256 0.234
100784 2010 0.345 0.263
2011 0.452 0.267
2012 0.635 0.021
2013 0.836 0.639
2014 0.043 0.209
Попытался сделать это, назначивгод до нового столбца в кадре данных, когда я его читаю, так что, когда я объединю все вместе, я смогу отслеживать, с какого года получено каждое наблюдение:
# concatenate all dataframes and group by institution
df_list = []
for key, value in data_by_year.items():
data_by_year[key]["school_year"] = key
df_list.append(data_by_year[key])
data = pd.concat(df_list, join="inner")
grouped_data = data.groupby(by=["id", "school_year"])
Но все, что яget - это то, что в значительной степени совпадает с тем, что я получил бы, если бы я просто располагал каждый фрейм данных один за другим поверх другого (кроме добавленного столбца school_year
):
id region_id name \
0 100654 5.0 Alabama A & M University
1 100663 5.0 University of Alabama at Birmingham
2 100690 5.0 Amridge University
3 100706 5.0 University of Alabama in Huntsville
4 100724 5.0 Alabama State University
Пробовал также с использованием pd.melt()
. Это тоже не сработало, так как не содержит ни одного из других столбцов в кадре данных, кроме двух указанных мной:
# concatenate all dataframes and group by institution
df_list = []
for key, value in data_by_year.items():
data_by_year[key]["school_year"] = key
df_list.append(data_by_year[key])
data = pd.concat(df_list, join="inner")
grouped_data = data.melt(id_vars=["id"], value_vars=["school_year"])
id variable value
0 100654 school_year 10_11
1 100663 school_year 10_11
2 100690 school_year 10_11
3 100706 school_year 10_11
4 100724 school_year 10_11
5 100751 school_year 10_11
Что я могу сделать по-другому? В обоих случаях изменение типа соединения в методе pd.concat()
на outer
ничего не меняет.