2017-09-05 67 views
-2

我有这样的代码中的R灌装一个大熊猫数据帧具有重复值

a <- c(NA) 
a<- matrix(c(a), nrow = 80) 
a<-as.data.frame(a) 

a[ c(T,F,F,F), ] <- "aaa" 
a[ c(F,T,F,F), ] <- "bbb" 
a[ c(F,F,T,F), ] <- "ccc" 
a[ c(F,F,F,T), ] <- "ddd" 

我怎样才能复制它在python作为熊猫数据帧?

str(a) 

'data.frame':80个OBS。 1个变量:

$ V1:字符 “AAA”, “BBB”, “CCC”, “DDD” ......

+0

什么是您预期的输出?你能证明吗? –

+0

@cᴏʟᴅsᴘᴇᴇᴅ应该为他的R代码添加预期的输出吗? :) – Wen

+0

@Wen请做好友! –

回答

1

你可以使用np.tile,构建一个系列。

import pandas as pd 
import numpy as np 

s = pd.Series(np.tile(['aaa', 'bbb', 'ccc', 'ddd'], 20)) 

print(s.shape) # size - 80 rows 
(80,) 

print(s.head(10)) # shows only the first 10 rows 
0 aaa 
1 bbb 
2 ccc 
3 ddd 
4 aaa 
5 bbb 
6 ccc 
7 ddd 
8 aaa 
9 bbb 
dtype: object 

如果你想有一个数据帧相反,你会怎么做:

df = pd.DataFrame({'V1' : np.tile(['aaa', 'bbb', 'ccc', 'ddd'], 20)}) 

print(df.head(10)) 
    V1 
0 aaa 
1 bbb 
2 ccc 
3 ddd 
4 aaa 
5 bbb 
6 ccc 
7 ddd 
8 aaa 
9 bbb 

处理动态行:

vals = ['aaa', 'bbb', 'ccc', 'ddd', ...] 
tiled_vals = np.tile(vals, (80 // len(vals)) + 1)[:80] # tile and clip to 80 

s = pd.Series(tiled_vals) 

或者,

df = pd.DataFrame({'V1' : tiled_vals}) 
+0

中显示了“a”数据框的输出。该代码对于80行形状是静态的,因为它会为您为函数np.tile编写的数字乘以DataFrame元素的数量。我需要的是满足80的要求,因为这个数字恰好是动态的。 – anitasp

+0

@anitasp你没有说清楚。无论如何,修复很简单,你可以检查我的编辑。 –

+0

@anitasp如果有效,请重新接受我的回答。 –

0

在Python:

['aaa', 'bbb', 'ccc', 'ddd']*20 

在该R

rep(c('aaa','bbb','ccc','ddd'),20)