从一个数据帧中提取长度相等的数据帧

时间:2017-08-22 16:40:12

标签: python python-3.x pandas

我有一个像这样的pandas数据框:

A  | B  | C  | index
-----------------
a1 | b1 | c1 | 1
a2 | b2 | c2 | 2
a3 | b3 | c3 | 3
a4 | b4 | c4 | 4
a5 | b5 | c5 | 5

这类似于索引排序的时间序列(如果你愿意,则为日期列)

我的目标是创建n个数据帧,每个数据帧按顺序包含3个条目。所以解决方案将在上面的例子中如下:

DF1)

A  | B  | C  | index
-----------------
a1 | b1 | c1 | 1
a2 | b2 | c2 | 2
a3 | b3 | c3 | 3

DF2)

A  | B  | C  | index
-----------------
a2 | b2 | c2 | 2
a3 | b3 | c3 | 3
a4 | b4 | c4 | 4

DF3)

A  | B  | C  | index
-----------------
a3 | b3 | c3 | 3
a4 | b4 | c4 | 4
a5 | b5 | c5 | 5

我怎么能在python 3.5和pandas中做到这一点?在其他语言中,我可能需要一个for循环并在范围内迭代i(1,len(df)-2),但我猜这里有更多的pythonic解决方案。

提前感谢您的帮助!! : - )

1 个答案:

答案 0 :(得分:3)

仍在使用for循环:

df2 <- df1[,1:4]
library(data.table)
df2 <- data.table(t(df2), colnam = colnames(df2), df = "df2")
df2 <- melt(df2, id.vars = c("colnam", "df"))
df2[, sd := t(df1[,5:8])]

ggplot(df2, aes(x = colnam, y = value, fill = df, ymax = value + sd, ymin = value - sd)) + 
geom_bar(position = "dodge", stat = "identity") + 
facet_wrap(~variable, ncol = 2, scales = "free_y") +
geom_errorbar(position = position_dodge(width = 0.9), width=0.2)