2015-07-22 139 views
1

我正在運行一個np.random.choice,如下所示。從numpy數組創建熊貓Df

record = np.random.choice(data, size=6, p=prob) 
     maxv = max(record) 
     minv = min(record) 
     val = record 

從這我找到最小和最大。我想加入這個熊貓數據框。以下是我的理想輸出:

Min,Max,value 
1,5,2 
1,5,3 
1,5,3 
1,5,5 
1,5,1 
1,5,3 

這是我想從一個模擬中得到的輸出示例。請記住,我正在多次執行此模擬,因此我希望能夠不斷添加到所創建的數據框上。每個模擬將分別擁有自己的最小值和最大值。我也想保留輸出中的最小值和最大值(爲什麼1和5在輸出示例中)。

+0

最新消息您的問題? – Pradheep

+0

如何從熊貓數據框中的示例代碼創建上面所需的輸出。 – user3609179

+0

抱歉應該更清楚地說明 – user3609179

回答

1

我會與最初的數據列「瓦爾」創建和DF那麼只需在一行中添加新列:

In [242]: 
df = pd.DataFrame({'Val':np.random.randint(1,6,6)}) 
df['Min'], df['Max'] = df['Val'].min(), df['Val'].max() 
df 

Out[242]: 
    Val Min Max 
0 4 2 5 
1 5 2 5 
2 5 2 5 
3 4 2 5 
4 5 2 5 
5 2 2 5 
0

這是我如何解決這個問題:

record = np.random.choice(data, size=6, p=prob) 
maxv = [max(record)] * len(record) 
minv = [min(record)] * len(record) 

new_data = zip(minv, maxv, record) 

df = DataFrame(new_data, columns=['Min', 'Max', 'val']) 
+0

很好的解決方案!謝謝! – user3609179

+0

對不起,遲到的迴應,但如果我有一個循環內的np.random.choice產生一堆輸出我怎麼能把它們全部追加到一個數據幀? – user3609179

+0

如果你有機會,請看看我可以如何從循環中追加此 – user3609179

0

只需通過模擬迭代,並追加值代入數據幀:

# CREATE DATA FRAME STRUCTURE 
df = pd.DataFrame(columns=['Min', 'Max', 'val']) 

# RUN SIMULATION IN LOOP ITERATION 
record = np.random.choice(data, size=6, p=prob) 

for i in range(len(record)): 
    maxv = np.max(record) 
    minv = np.min(record) 
    val = record[i] 

    # APPEND ROW 
    df.loc[len(df)] = [maxv, minv, val] 
+1

我認爲這是一種低效率的方法,雖然是一種常見方法。像數組一樣,DataFrames佔用連續的內存,並且追加到它們上面非常昂貴。追加到列表(專爲此設計)並最終轉換爲數據框總是更好。另外,你不需要範圍內的0,你應該在整個記錄上使用向量化的np.max和np.min,而不是在行上單獨使用。只是我的兩分錢。 – cxrodgers

+0

優秀點@cxrodgers!事實上,數據框是爲了一次加載而不是附加的。直到最近,熊貓才允許'df.loc [i]'作爲一行附加。而這[SO帖子](http://stackoverflow.com/questions/10715965/add-one-row-in-a-pandas-dataframe)顯示行追加的流行。另外,OP提到了很多次運行模擬。隨時downvote,但你會得到upvote。 – Parfait