2017-08-07 88 views

回答

2

我想你的變化值需要index第一然後分配:

有問題,如果過濾的a的行數小於爲1000,所以min加入 - 因此它返回的長度a如果length < 1000

a = df.loc[df.y1 == 2, 'y1'] 
df.loc[a.sample(min(len(a.index), 1000)).index, 'y1'] = -9 

謝謝你,John Galt爲更好的解決方案,如果可能的話在y1列沒有2

df.loc[(a if len(a.index) < 1000 else a.sample(1000)).index, 'y1'] = -9 
+0

這個作品,謝謝! – aspire57

+1

小問題,當'a'是一個空數據框時會引發一個問題,你會更喜歡'(a如果len(a.index)<1000 else a.sample(1000))。index'而不是? – Zero

0

因爲當你使用「==」爲索引,你只應該用正確的方式「=」,爲第二個來分配-9值

+0

如果我理解正確的話,我想:df.loc [df.y1 == 「2」, 'Y1'] .sample(1000)=「 - 9」。但不起作用 – aspire57

+0

a其實確實有兩個錯誤,而且我回答太快了,我應該先看過示例函數 –