我有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值?
答案 0 :(得分: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
答案 1 :(得分:0)
只需使用cumcount
即可获得第二个lvl 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)