在Python pandas中拆分和连接数据帧以使用rpy2进行绘图

时间:2013-02-24 16:29:25

标签: python numpy pandas rpy2

我对Python中的pandas数据帧有疑问:我有一个大型数据帧df,我将其分为两个子集df1df2df1df2一起不构成df的所有内容,它们只是两个互斥的子集。我想在ggplot中使用rpy2绘制此图,并根据它们是来自df1还是df2来显示图中的变量。 ggplot2需要一个融合的数据框,所以我必须创建一个新的数据框,其中有一列说明每个条目是来自df1还是df2,以便可以将此列传递给ggplot。我尝试这样做:

# add labels to df1, df2
df1["label"] = len(df1.index) * ["df1"]
df2["label"] = len(df2.index) * ["df2"]
# combine the dfs together
melted_df = pandas.concat([df1, df2])

现在可以如下绘制:

# plot parameters from melted_df and colour them by df1 or df2
ggplot2.ggplot(melted_df) + ggplot2.ggplot(aes_string(..., colour="label"))

我的问题是,是否有一种更容易,更简洁的方式来做到这一点。 ggplot需要不断熔化/未熔化的dfs,并且总是手动将熔化的形式添加到df的不同子集似乎很麻烦。感谢。

1 个答案:

答案 0 :(得分:2)

当然,您可以使用以下方式进行简化:

df1['label'] = 'df1'

(而不是df1["label"] = len(df1.index) * ["df1"]。)

如果你发现自己做了很多,为什么不创建自己的功能呢? (像这样):

plot_dfs(dfs):
    for i, df in enumerate(dfs):
        df['label'] =  'df%s' % i+1 # note: this *changes* df
    melted_df = pd.concat(dfs)

    # plot parameters from melted_df and colour them by df1 or df2
    ggplot2.ggplot(melted_df) + ggplot2.ggplot(aes_string(..., colour="label"))

    return # the melted_df or ggplot ?