簡體   English   中英

子集 DataFrame 列 Numpy Pandas 中的數組

[英]Subset DataFrame Columns Numpy Array in Pandas

我正在嘗試根據單獨數組中存在的值對 pandas dataframe 中的數據進行子集化。 下面是一個有效的示例示例,說明了我正在嘗試做的事情:

import pandas as pd
import numpy as np
mysubset = np.array([1,2,3,4])
d = {'col1': [1, 2, 3, 4, 5, 6], 'col2': [3, 4, 1, 3, 5, 5]}
df = pd.DataFrame(data=d)
df[df['col1'].isin(mysubset)]

使用該工作代碼作為原型,我正在對我的實際真實數據實施(我認為是)相同的過程,但它不起作用。 我的真實數據看起來像

>>> tmp.head()
   ItemID                  P0
44  26785         0.276844507
61  26534  1.4108438640000001
71  14107  1.0652574239999999
86  26530  1.1059459039999999
93  18142         0.903011679

我想用於子集的數組是

>>> op_items
array([18692, 18694, 18696, 18706, 18711, 18714, 18716, 18722, 19332,
       19333, 26526, 26527, 26530, 26532, 26533, 26534, 26535, 26536,
       26538, 26541, 14107, 14110, 14120, 14149, 14165, 17984, 18004,
       18005, 18006, 18007, 18008, 18134, 18136, 18139, 18141, 18142,
       19081, 19084, 19086, 20789, 20794, 20796, 20800, 20802, 26784,
       26785, 26786, 26787], dtype=int64) 

在上面的玩具示例中使用它會給出

>>> tmp[tmp['ItemID'].isin(op_items)]
Empty DataFrame
Columns: [ItemID, P0]
Index: []

但是,手動從列表中抓取一些元素確實有效:

>>> tmp[tmp['ItemID'].isin(['18692', '18696'])]
    ItemID           P0
236  18696  0.566035305
624  18692   0.60981902

使用以下內容確認它們與玩具示例中的形式相同

>>> type(op_items)
<class 'numpy.ndarray'>
>>> type(tmp['ItemID'])
<class 'pandas.core.series.Series'>

所以,我不確定我犯了什么其他錯誤並且可以使用指針。 我意識到在我硬編碼和抓取的示例中,我將值轉換為列表。 但是,上面的玩具示例使用了isin功能,其中mysubset是一個類似於op_items的數組。

謝謝我的問題與這個不同,因為我不擔心重復, 子集 pandas dataframe 和相應的 numpy 數組

您的op_items是一個整數數組,而您的tmp['ItemID']是字符串類型。 利用:

tmp['ItemID'] = tmp['ItemID'].astype('Int64')

tmp[tmp['ItemID'].isin(op_items)]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM