#pandas #merge #assign
Вопрос:
Я могу объединить два кадра данных вручную, но я не могу понять, как автоматизировать этот процесс.
Это слияние может быть выполнено следующим образом:
new_df = df1.assign(index_count=df1.groupby('Step_ID').cumcount())
.merge(df2.assign(index_count=df2.groupby('Step_ID').cumcount()),
on=['Step_ID', 'index_count'], how='outer')
.sort_values(['Step_ID', 'index_count'])
.drop('index_count', axis=1)
print(new_df)
Это отлично работает вручную, но я хотел бы прочитать все csv-файлы в папке и объединить их (с приведенным выше кодом) автоматически.
Чтобы добавить все CSV-файлы, я попробовал следующее:
Вот загрузка двух csv-файлов: https://github.com/pit9921/test
В случае, если read_csv загруженных файлов не работает, вот оба df, которые могут быть сохранены локально:
import pandas as pd
data = {'Step_ID': ["Step1", "Step1", "Step1", "Step2", "Step2", "Step3", "Step3"],
'value_01': [2, 2.3, 2.2, 0, 0, 5, 5.2]}
df1 = pd.DataFrame(data)
df1.to_csv('df1.csv', index=False)
data = {'Step_ID': ["Step1", "Step1", "Step1", "Step1", "Step2", "Step2", "Step2", "Step3", "Step3", "Step3"],
'value_02': [2.3, 2.5, 2.1, 2.5, 0, 0, 0, 5.1, 5.6, 5.8]}
df2 = pd.DataFrame(data)
df2.to_csv('df2.csv', index=False)
Ответ №1:
Вот решение от пользователя (я думаю, Генри Экера), который удалил свои сообщения. Извините за мой дилетантизм и большое вам спасибо.
import pandas as pd
import glob
path = r'C:Usersxxx'
all_files = glob.glob(path "/*.csv")
dfs = []
for filename in all_files:
df = pd.read_csv(filename, index_col=None, header=0)
dfs.append(df.set_index(['Step_ID', df.groupby('Step_ID').cumcount()]))
merged = pd.concat(dfs, axis=1).droplevel(1).reset_index()