【问题标题】:Unique Concatenate Data Frame Using Pandas使用 Pandas 的唯一连接数据框
【发布时间】:2019-01-29 03:09:22
【问题描述】:

我有 365 个 CSV 文件,代表唯一样本位置的平均值。每个 CSV 文件代表不同的一天。例如,我的 CSV 文件列为 Day1.csv、Day2.csv、Day3.csv 等。我可以在 Python 中导入所有 CSV,并使用 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"

每个位置仅列出一次,所有 MEANS 按天顺序列出(第 1 天、第 2 天、...等等...)

这是我必须创建大型合并 DF 的快速 Python 代码:

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

如何在此基础上生成所需的串联文件,其中 MEAN 值按天顺序列出?

【问题讨论】:

    标签: python pandas csv dataframe


    【解决方案1】:
    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
    

    【讨论】:

    • 哇,太神奇了!这正是我想要的,它只有 2 行代码。惊人!谢谢!
    【解决方案2】:

    您只需使用cumcount 获得第二级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)
    

    【讨论】:

      猜你喜欢
      • 2021-07-25
      • 1970-01-01
      • 2020-03-14
      • 2021-10-09
      • 2018-06-23
      • 2019-06-05
      • 1970-01-01
      • 2020-04-30
      • 1970-01-01
      相关资源
      最近更新 更多