我对Python中的pandas数据帧有疑问:我有一个大型数据帧df
,我将其分为两个子集df1
和df2
。 df1
和df2
一起不构成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的不同子集似乎很麻烦。感谢。
答案 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 ?