Группировать данные по уникальному идентификатору, году - PullRequest
1 голос
/ 21 октября 2019

Я собираю данные из нескольких файлов 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 ничего не меняет.

...