pandas 创建和合并多个 Dataframe

niwlg2el  于 2023-01-24  发布在  其他
关注(0)|答案(2)|浏览(162)

我有多个文件。每个对应的城市有一个ID和“卷”列的数据。我试图从csv文件创建 Dataframe 和处理后,我想合并这些 Dataframe 的“ID”与所有“卷”列如下:VOLUME_{CITY},其中{CITY}对应于城市名称。
到目前为止我是这样做的:

data_dir_file = 'Data'

cities = ['NY','Chicago','Boston','Toronto']

dfs = []
for city in cities: 
    file_name = f'Data_2010_{city}.csv'
    df = pd.read_csv(f'{data_dir_file}\{file_name}',sep=';')
    df = df[['ID','VOLUME']].drop_duplicates()
    dfs.append(df)
df_concat = pd.concat(dfs)
print(df_concat)

因此,这连接了每个 Dataframe ,但我如何通过“ID”合并它们,而不是进行连接?
每个 Dataframe 如下所示

我想要的是这样的东西:

piv4azn7

piv4azn71#

您可以使用pd.merge按ID合并数据(也可以更改列“VOLUME”的名称,否则它们将被重命名为VOLUME_x,VOLUME_y,丢失有关城市的信息)

data_dir_file = 'Data'

cities = ['NY','Chicago','Boston','Toronto']

dfs = pd.DataFrame()
for city in cities: 
    file_name = f'Data_2010_{city}.csv'
    df = pd.read_csv(f'{data_dir_file}\{file_name}',sep=';')
    df = df[['ID','VOLUME']].drop_duplicates()
    df.columns = ['ID','VOLUME_'+city]
    if len(dfs) == 0:
        dfs = df
    else:
        dfs = dfs.merge(df, on= 'ID', outer=True)
kx7yvsdv

kx7yvsdv2#

如果删除“ID”上的重复项,则可以将ID列定义为索引,然后将所有 Dataframe 一起concat

import pathlib

data_dir_file = pathlib.Path('Data')

cities = ['NY', 'Chicago', 'Boston', 'Toronto']

dfs = []
for city in cities: 
    file_name = f'Data_2010_{city}.csv'
    df = pd.read_csv(data_dir_file / file_name, sep=';')
    df = (df[['ID', 'VOLUME']].drop_duplicates('ID').set_index('ID')
                              .squeeze().rename(f'VOLUME_{city}'))
    dfs.append(df)

# Consider ID is unique after drop_duplicates else use merge reduction
df_concat = pd.concat(dfs, axis=1)

相关问题