2017-09-05 65 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)