Python Pandas组按条件

理查德·罗宾逊

我有一个来自CSV文件的数据框,格式如下:

"name";"elapsed"
"etl_A";6.13e-05
"stl_A";0.0001
"etl_B";0.001
"stl_B";0.0003
"etl_C";23.2e-06
...

使用Python Pandas,我想将数据框转换为以下格式:

benchmark_name;etl_elpased;stl_elapsed
A;6.13e-05;0.0001
B;0.001;0.0003
C;23.2e-06;...

我已经使用相应的groupBy方法结合正则表达式来提取基准名称,从而用其他语言进行了类似的处理,但是我对Python和Pandas还是陌生的。根据我的理解,PandasgroupBy函数的行为与其他语言不同,我无法弄清楚。

我已经尝试过这样的事情:

def extract_benchmark_name(full_name: str) -> str:
    return regex.match(full_name).groups()[1]

df = pandas.read_csv(source, header=0, sep=';')
etl_df = df['etl' in df['name']]
stl_df = df['stl' in df['name']]

etl_df['name'] = etl_df['name'].apply(extract_benchmark_name)
stl_df['name'] = stl_df['name'].apply(extract_benchmark_name)

但是,这看起来不正确,还会给我带来各种错误。

最终,我想将其与matplotlib结合使用以生成像这样的条形图,并带有比较etl和stl的归一化值:

图表

非常感谢您完成这两项任务中的任何一项,谢谢!

斯科特·波士顿

尝试(通过@TrentonMcKinney改进进行更新):

df[['Benchmark', 'Type']] = df.name.str.split('_', expand=True) 
ax = df.pivot('Type','Benchmark','elapsed').plot.bar(color=['b','r'], width=.95, edgecolor='w', alpha=.8)
ax.legend(loc='lower center', bbox_to_anchor=(.5,1.01), ncol=2, frameon=False)

输出:

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章