Numpy目標是使用布林值對特定列的多個 pandas 行進行切片。
以下代碼應該完成任務
import numpy as np
import numpy.random
import pandas as pd
numpy.random.seed(0)
h=((), ('x'), (), ('y'), (), (), ())
drop_idx=[n for n, dl in enumerate(h) if len(dl)]
df = pd.DataFrame(np.arange(7),columns=['class'])
df.reset_index(inplace=True)
df2=pd.DataFrame(np.arange(5),columns=[('feature','ch1')])
idx_true=np.invert(np.array(h).astype(bool))
g=df[idx_true.tolist()].reset_index(drop=True)
df2['dlabel']=g['class']
但是,我想知道上面的代碼是否可以進一步縮短,尤其是這些行
idx_true=np.invert(np.array(h).astype(bool))
g=df[idx_true.tolist()].reset_index(drop=True)
df2['dlabel']=g['class']
目前,Pandas如果我直接使用Numpy布林值而不轉換為串列,則會引發錯誤
df[idx_true.tolist()]
有什么我想念的嗎,或者這是實作預期目標的唯一方法?
uj5u.com熱心網友回復:
您可以簡單地使用:
df2['dlabel'] = df.loc[idx_true, 'class'].values
您實際上甚至不需要轉換h為 numpy 陣列:
df2['dlabel'] = df.loc[[not bool(x) for x in h], 'class'].values
輸出:
(feature, ch1) dlabel
0 0 0
1 1 2
2 2 4
3 3 5
4 4 6
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/461721.html
上一篇:如何將''轉換為int?
