Объединить несколько строк в одну строку в CSV-файле, используя python pandas - PullRequest
2 голосов
/ 15 января 2020

У меня есть CSV-файл с несколькими строками, как указано ниже

Id  Name  Marks1 Marks2 Marks3 Marks4 Marks5
1   ABC   10     NAN    NAN    NAN    NAN
2   BCD   15     NAN    NAN    NAN    NAN
3   CDE   17     NAN    NAN    NAN    NAN
1   ABC   NAN    18     NAN    17     NAN
2   BCD   NAN    10     NAN    15     NAN
1   ABC   NAN    NAN    16     NAN    NAN
3   CDE   NAN    NAN    19     NAN    NAN

Я хочу объединить строки с одинаковыми идентификатором и именем в одну строку, используя pandas в python. Выход должен быть:

Id  Name  Marks1 Marks2 Marks3 Marks4 Marks5
1   ABC   10     18     16     17     NAN
2   BCD   15     10     NAN    15     NAN
3   CDE   17     NAN    19     NAN    NAN

Ответы [ 2 ]

3 голосов
/ 15 января 2020

IIU C, DataFrame.groupby + as_index=False с GroupBy.first для устранения NaN.

#df = df.replace('NAN',np.nan) #If necessary
df.groupby(['Id','Name'],as_index=False).first()

, если вы думаете, может иметь имя парного имени с ненулевыми значениями в некотором столбце, который вы можете использовать GroupBy.apply с Series.ffill и Series.bfill + DataFrame.drop_duplicates для хранения всей информации.

df.groupby(['Id','Name']).apply(lambda x: x.ffill().bfill()).drop_duplicates()

Выход

   Id Name Marks1 Marks2 Marks3 Marks4  Marks5
0   1  ABC     10     18     16     17     NaN
1   2  BCD     15     10    NaN     15     NaN
2   3  CDE     17    NaN     19    NaN     NaN
0 голосов
/ 15 января 2020

Hacky answer:

pd.groupby(“Name”).mean().reset_index()

Это будет работать только в том случае, если для каждого столбца есть только одно допустимое значение для каждого Имени.

...