我有一个这样创建的CSV文件:
keep_same;get_max;get_min;get_avg
1213;176;901;517
1213;198;009;219
1213;898;201;532
现在,我希望将第四行添加到现有CSV文件中,如下所示:
First column: Remains same: 1213
Second column: Get max value: 898
Third column: Get min value: 009
Fourth column: Get avg value: 422.6
因此最终的CSV文件应为:
keep_same;get_max;get_min;get_avg
1213;176;901;517
1213;198;009;219
1213;898;201;532
1213;898;009;422.6
请帮助我实现相同目标。使用Pandas
不是强制性的。
谢谢!
答案 0 :(得分:1)
df.agg(...)
接受一个dict,其中dict键是列的名称,值是执行所需聚合的字符串:
df_agg = df.agg({'keep_same': 'mode', 'get_max': 'max',
'get_min': 'min', 'get_avg': 'mean'})[df.columns]
产生:
keep_same get_max get_min get_avg
0 1213 898 9 422.666667
然后,您只需将df_agg
附加到df
:
df = df.append(df_agg, ignore_index=False)
结果:
keep_same get_max get_min get_avg
0 1213 176 901 517.000000
1 1213 198 9 219.000000
2 1213 898 201 532.000000
0 1213 898 9 422.666667
请注意,附加行的索引为0
。如果需要,可以通过ignore_index=True
进行追加。
还请注意,如果您打算大量执行此追加操作,它将非常慢。在这种情况下,确实存在其他方法,但是一次或仅几次,追加即可。
答案 1 :(得分:0)
假设您不关心可以使用loc[-1]
添加行的索引:
df = pd.read_csv('file.csv', sep=';', dtype={'get_min':'object'}) # read csv set dtype to object for leading 0 col
row = [df['keep_same'].values[0], df['get_max'].max(), df['get_min'].min(), df['get_avg'].mean()] # create new row
df.loc[-1] = row # add row to a new line
df['get_avg'] = df['get_avg'].round(1) # round to 1
df['get_avg'] = df['get_avg'].apply(lambda x: '%g'%(x)) # strip .0 from the other records
df.to_csv('file1.csv', index=False, sep=';') # to csv file
退出:
keep_same;get_max;get_min;get_avg
1213;176;901;517
1213;198;009;219
1213;898;201;532
1213;898;009;422.7