6
A
回答
8
pandas
答案
- 使用
query
得到過濾df
只有value == 1
- 使用
sample(frac=.1)
採取的那些 - 10%使用結果的指標分配零
df.loc[
df.query('value == 1').sample(frac=.1).index,
'value'
] = 0
替代numpy
答案
- 得到的其中
df['value']
是1
- 分配10點%的零和90周%的人
v = df.value.values == 1
df.loc[v, 'value'] = np.random.choice((0, 1), v.sum(), p=(.1, .9))
2
你也許可以使用numpy.random.choice
:
>>> idx = df.index[df.value==1]
>>> df.loc[np.random.choice(idx, size=idx.size/10, replace=False)].value = 0
+0
OP想要隨機取代只有'1'的行,而不是隨機抽樣的整個df – EdChum
+0
是的,我錯過了,要改變答案 –
2
這裏有一個np.random.choice
方法NumPy的 -
a = df.value.values # get a view into value col
idx = np.flatnonzero(a) # get the nonzero indices
# Finally select unique 10% from those indices and set 0s there
a[np.random.choice(idx,size=int(0.1*len(idx)),replace=0)] = 0
採樣運行 -
In [237]: df = pd.DataFrame(np.random.randint(0,2,(100,2)),columns=['id','value'])
In [238]: (df.value==1).sum() # Original Count of 1s in df.value column
Out[238]: 53
In [239]: a = df.value.values
In [240]: idx = np.flatnonzero(a)
In [241]: a[np.random.choice(idx,size=int(0.1*len(idx)),replace=0)] = 0
In [242]: (df.value==1).sum() # New count of 1s in df.value column
Out[242]: 48
另外,更多的大熊貓的方法 -
idx = np.flatnonzero(df['value'])
df.ix[np.random.choice(idx,size=int(0.1*len(idx)),replace=0),'value'] = 0
運行測試
所有的方法發佈迄今爲止 -
def f1(df): #@piRSquared's soln1
df.loc[df.query('value == 1').sample(frac=.1).index,'value'] = 0
def f2(df): #@piRSquared's soln2
v = df.value.values == 1
df.loc[v, 'value'] = np.random.choice((0, 1), v.sum(), p=(.1, .9))
def f3(df): #@Roman Pekar's soln
idx = df.index[df.value==1]
df.loc[np.random.choice(idx, size=idx.size/10, replace=False)].value = 0
def f4(df): #@Mine soln1
a = df.value.values
idx = np.flatnonzero(a)
a[np.random.choice(idx,size=int(0.1*len(idx)),replace=0)] = 0
def f5(df): #@Mine soln2
idx = np.flatnonzero(df['value'])
df.ix[np.random.choice(idx,size=int(0.1*len(idx)),replace=0),'value'] = 0
計時 -
In [2]: # Setup inputs
...: df = pd.DataFrame(np.random.randint(0,2,(10000,2)),columns=['id','value'])
...: df1 = df.copy()
...: df2 = df.copy()
...: df3 = df.copy()
...: df4 = df.copy()
...: df5 = df.copy()
...:
In [3]: # Timings
...: %timeit f1(df1)
...: %timeit f2(df2)
...: %timeit f3(df3)
...: %timeit f4(df4)
...: %timeit f5(df5)
...:
100 loops, best of 3: 3.96 ms per loop
1000 loops, best of 3: 844 µs per loop
1000 loops, best of 3: 1.62 ms per loop
10000 loops, best of 3: 163 µs per loop
1000 loops, best of 3: 663 µs per loop
相關問題
- 1. 隨機取樣和熊貓dataframes
- 2. 熊貓隨機讀取一個NaN?
- 3. 熊貓pivot_table百分點/分位數
- 4. 熊貓:創建百分比彙總表
- 5. 熊貓GROUPBY:百分比高於閾值
- 6. Python的熊貓百分比計算
- 7. 在熊貓中創建百分比桶
- 8. dataframe熊貓中的總數百分比
- 9. 計算大熊貓的百分點
- 10. 隨機採樣與熊貓數據幀
- 11. 產生大熊貓隨機字符串
- 12. Python熊貓隨機抽樣行
- 13. 熊貓隨機加權選擇
- 14. 隨機選擇熊貓ň日期DATE_RANGE
- 15. 在熊貓中隨機更改行
- 16. 熊貓隨機抽樣與刪除
- 17. 隨機結合大熊貓組對象
- 18. 取下一記錄到百分位值在熊貓列
- 19. 取代基於在熊貓
- 20. 包含百分比符號的批量隨機播放列表
- 21. 熊貓文件操作k到1000
- 22. 變換SQL代碼熊貓符號
- 23. 使用熊貓進行數據分析的百分比python代碼
- 24. 獲取隨機生成器生成的百分比唯一編號
- 25. 隨機函數,計算百分比
- 26. 選擇百分比隨機贏家
- 27. 計算隨機數的百分比
- 28. 真正的Python隨機百分比
- 29. 轉換成隨機數的百分比
- 30. 獲取熊貓
您成爲'查詢'功能贊助商:-) – Boud
@布朗我傾向於專注於特定功能並用它回答很多問題。 – piRSquared