Как создать списки в столбце DataFrame, просмотрев другой DataFrame, используя pandas? - PullRequest
0 голосов
/ 27 мая 2020

У меня есть DataFrame из pandas с именем df, который имеет несколько столбцов (показаны только 3 ниже) и 90 000 строк:

        Key        Date     Rating
0      123abc   08/19/2015    A
1      456def   04/23/2013    B-
2      123abc   06/10/2012    C
3      789ghi   01/04/2017    B
.        .           .        .
.        .           .        .
90000  999zzz   12/12/2012    D

Я хочу создать отдельный DataFrame, df_ratings, в котором есть два столбца: Key и Rating List. В df_ratings столбец Key должен быть уникальным, а столбец Rating List должен содержать список всех Ratings, которые появляются напротив этого Key в df.

        Key       Rating List
0      123abc     ['A', 'C']
1      456def       ['B-']
2      789ghi     ['B', 'D']
.        .            .
.        .            .
30000  999zzz   ['A', 'C+', 'D']

Подход, который я использовал до сих пор:

df_zip = list(zip(df['Key'], df['Rating']))

def dfRatingsList(row):
    rating = []
    for x, y in df_zip:
        if row['Key'] == x:
            rating.append(y)
    return rating

df_ratings = pd.DataFrame(df['Key'].unique(), columns=['Key'])
df_ratings = df_ratings.fillna('NULL')
df_ratings['Rating List'] = df_ratings.apply(dfRatingsList, axis=1)

Учитывая размер моего набора данных, это занимает несколько часов. Как я могу ускорить этот процесс / улучшить свой код?

1 Ответ

0 голосов
/ 27 мая 2020

Попробуйте следующее:

df = df.groupby(by=['Key'], as_index=False).agg({'Rating': list})
print(df)

      Key        Rating
0  123abc  [A, A, A, A]
1  123def           [C]
2  456def          [B-]
3  789ghi           [B]
4  999zzz           [D]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...