Уникальный объединенный фрейм данных с использованием панд - PullRequest
0 голосов
/ 29 января 2019

У меня есть 365 CSV-файлов, представляющих средние значения уникальных мест выборки.Каждый файл CSV представляет отдельный день.Например, мои CSV-файлы перечислены как Day1.csv, Day2.csv, Day3.csv и т. Д.Я могу импортировать все CSV-файлы в Python и использовать Pandas для преобразования их в кадры данных и, по существу, добавить все 365 DF в один длинный кадр данных.Вот длинный фрейм данных:

Location    MEAN    Day
A   0.2235  1
B   0.8215  1
C   0.0159  1
D   0.4259  1
A   0.5902  2
B   0.6201  2
C   0.0239  2
D   0.3021  2
A   0.7291  3
B   0.5022  3
C   0.0504  3
D   0.4982  3

.... и так далее ...

Местоположения постоянны.

Что я хочу сделать, это взятьэто очень длинный добавленный DF (объединенный через 365 дней), и объединение значений MEAN последовательно по местоположению.Я хотел бы иметь новый столбец MEAN, в котором перечислены все средства по дате, разделенные запятыми (или какой-либо другой разделитель).По сути, это то, что я хочу:

Location    MEAN
A   "0.2235, 0.5902, 0.7291"
B   "0.8215, 0.6201, 0.5022"
C   "0.0159, 0.0239, 0.0504"
D   "0.4259, 0.3021, 0.4982"

, где каждое место указано только один раз, а все СРЕДСТВА перечислены последовательно по дням (день1, день2, ... и т. Д.)

Вот быстрый Python-код, который мне нужен для создания большого объединенного DF:

combined_csv = pd.concat( [ pd.read_csv(f) for f in Files ] )

Как я могу использовать это для создания желаемого объединенного файла со значениями MEAN, перечисленными последовательно по дням?

Ответы [ 2 ]

0 голосов
/ 29 января 2019
df1 = df.sort_values(['Location','Day']).reset_index()
df1.groupby(['Location'])['MEAN'].apply(lambda x : ','.join(x))


Location
A    0.2235,0.5902,0.7291
B    0.8215,0.6201,0.5022
C    0.0159,0.0239,0.0504
D    0.4259,0.3021,0.4982
Name: MEAN, dtype: object
0 голосов
/ 29 января 2019

Что вам нужно, просто с помощью cumcount получите ключ 2-го уровня merge, в зависимости от вас Файлы упорядочены

combined_csv = pd.concat( [ pd.read_csv(f) for f in Files ],keys=np.arange(len(Files)) ).reset_index(level=0)


Longdf['level_0']=Loandf.groupby('Location').cumcount()

Longdf=Longdf.merge(combined_csv,on=['Location','level_0'],how='left').drop('level_0',1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...