2014-11-24 96 views
2

我在嘗試之前嘗試過閱讀類似的問題,但我仍然難住。 任何幫助appreaciated。熊貓:基於條件創建一個具有隨機值的新列

輸入: 我有一個數據幀熊貓與標記 '',其具有範圍值的列:[0.5,13.65]

輸出: 我想創建一個新的列,其中該= 0.5所有氡值被改變到一個隨機的值在0.1和0.5

之間

我嘗試這樣做:

df['radon_adj'] = np.where(df['radon']==0.5, random.uniform(0, 0.5), df.radon) 

不過,我得到了我想這個問題,以及0.5


所有值相同的隨機數。它創建隨機數,但其他statment不會複製原始值將是創建你使用where選擇它們之前,你可能需要的隨機數

df['radon_adj'] = df['radon'].apply(lambda x: random.uniform(0, 0.5) if x == 0.5 else df.radon) 

回答

3

方式一:

>>> df = pd.DataFrame({"radon": [0.5, 0.6, 0.5, 2, 4, 13]}) 
>>> df["radon_adj"] = df["radon"].where(df["radon"] != 0.5, np.random.uniform(0.1, 0.5, len(df))) 
>>> df 
    radon radon_adj 
0 0.5 0.428039 
1 0.6 0.600000 
2 0.5 0.385021 
3 2.0 2.000000 
4 4.0 4.000000 
5 13.0 13.000000 

你可能會更聰明一點,只會產生儘可能多的隨機數字,但您可能需要更長的時間輸入此句子,而不是您節省的時間。 (我花了9毫秒產生〜100萬的數字。)

,如果你使用的x代替df.radonapply方法將工作太:

>>> df['radon_adj'] = df['radon'].apply(lambda x: random.uniform(0.1, 0.5) if x == 0.5 else x) 
>>> df 
    radon radon_adj 
0 0.5 0.242991 
1 0.6 0.600000 
2 0.5 0.271968 
3 2.0 2.000000 
4 4.0 4.000000 
5 13.0 13.000000 
+0

是否有可能對他們有什麼不同? (非修辭性的,順便說一句 - 我不記得哪些方法是自覺的,哪些不是,我不認爲'len'在意,但我不會賭二十美元。) – DSM 2014-11-24 19:59:19

+0

謝謝,@DSM。這很好。 – HolaGonzalo 2014-11-24 20:16:38

相關問題