[英]Expanding pandas Data Frame rows based on number and group ID (Python 3).
我一直在努力尋找一種基於預定數字和分組變量(id)擴展/克隆觀察行的方法。 對於上下文,這是使用pandas和numpy(python3)的示例數據幀。
df = pd.DataFrame([[1, 15], [2, 20]], columns = ['id', 'num'])
df
Out[54]:
id num
0 1 15
1 2 20
我想通過基於其ID組的“ num”變量中給出的數字來擴展/克隆行。 在這種情況下,我想要id = 1的15行和id = 2的20行。這可能是一個簡單的問題,但是我正在努力進行這項工作。 我一直在搞亂reindex和np.repeat,但是概念上的部分對我來說不太合適。
在R中,我使用了splitstackshape包中的expandRows函數,它看起來像這樣:
library(splitstackshape)
df <- data.frame(id = c(1, 2), num = c(15, 20))
df
id num
1 1 15
2 2 20
df2 <- expandRows(df, "num", drop = FALSE)
df2
id num
1 1 15
1.1 1 15
1.2 1 15
1.3 1 15
1.4 1 15
1.5 1 15
1.6 1 15
1.7 1 15
1.8 1 15
1.9 1 15
1.10 1 15
1.11 1 15
1.12 1 15
1.13 1 15
1.14 1 15
2 2 20
2.1 2 20
2.2 2 20
2.3 2 20
2.4 2 20
2.5 2 20
2.6 2 20
2.7 2 20
2.8 2 20
2.9 2 20
2.10 2 20
2.11 2 20
2.12 2 20
2.13 2 20
2.14 2 20
2.15 2 20
2.16 2 20
2.17 2 20
2.18 2 20
2.19 2 20
再次,如果這是一個愚蠢的問題,對不起,請先感謝您的幫助。
我無法復制您的索引,但實際上可以很容易地使用np.repeat
復制您的值。
v = df.values
df = pd.DataFrame(v.repeat(v[:, -1], axis=0), columns=df.columns)
如果您想要確切的索引(盡管我看不到為什么groupby
),則需要進行groupby
操作-
def f(x):
return x.astype(str) + '.' + np.arange(len(x)).astype(str)
idx = df.groupby('id').id.apply(f).values
將idx
分配給df
的索引-
df.index = idx
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.