我有一個pandas Dataframe和一個pandas Series,看起來像下面這樣。
df0 = pd. DataFrame({'col1': ['a','b','c','d'], 'col2': ['b','c','e','f'],'col3': ['d','f','g','a']})
col1 col2 col3
0 a b d
1 b c f
2 c e g
3 d f a
df1 = pd. Series(['b','g','g'], index=['col1','col2','col3'])
col1 b
col2 g
col3 g
dtype: 物件。
如你所見,df0的列和df1的索引是相同的。對于df1的每個索引,我想知道該索引的值是否存在于df0的相應列中。因此,df1.col1是b,我們需要只在df0.col1中尋找b并檢查它是否存在。
期望的輸出:
array([True, False, True])
有沒有一種方法可以不使用回圈來做這個?也許有一個numpy或pandas的本地方法?
uj5u.com熱心網友回復:
Pandas的pandas.DataFrame.eq方法可能是最簡單的。
df0.eq(df1).any()
col1 True
col2 False False
col3 True True
d型別。bool
uj5u.com熱心網友回復:
使用numpy
你可以廣播 df1來檢查df0:
np.any(df1[None, :] == df0, axis=0)
# col1 True[/span]。
# col2 False[/span]。
# col3 True # col3 False
# dtype: bool
注意,這假設df1.index和df0.columns有相同的順序。如果不是這樣,請先reindex:
np.any(df1.reindex(df0.columns)[None, :] ==df0, axis=0)
使用pandas的方法
使用apply來檢查給定的df1值是否在df0的相應col:
df0.apply(lambda col: col.isin([df1[col.name]])).any()
# col1真
# col2 False[/span].
# col3 True # col3 False
# dtype: bool
uj5u.com熱心網友回復:
你可以用apply代替loop。
試試這個:
df0 = pd. DataFrame({'col1': ['a','b','c','d'], 'col2': ['b','c','e','f'],'col3': ['d','f','g','a']})
df1 = pd. Series(['b'/span>,'g'/span>,'g'/span>], index=['col1','col2','col3'])
df0.apply(lambda x : df1[x.name] in x.values) # for example x <-> 'col1' check this -> ' b' in ['a', 'b', 'c', 'd']
# col1 True <-> 'b' in ['a','b','c','d']
# col2 False <-> 'g' in ['b', 'c', 'e', 'f']
# col3 True <-> 'g' in ['d', 'f', 'g', 'a']
# dtype: bool
df0.apply(lambda x : df1[x.name] in x.values) .tolist()
# [True, False, True]/span>
uj5u.com熱心網友回復:
import pandas as pd
array=[]
df0 = pd. DataFrame({'col1': ['a','b','c','d'], 'col2': ['b','c','e','f'],'col3': ['d','f','g','a']})
df1 = pd. Series(['b'/span>,'g'/span>,'g'/span>], index=['col1','col2','col3'])
for i in range(1,4)。
col = 'col' str(i)
array.append(df0[col].str.contains(df1[col]).any()
print(array)
uj5u.com熱心網友回復:
你可以利用廣播:
(df0 == df1).any(). values
它也適用于NumPy的ndarrays:
assert (df0.columns == df1.columns).all()
(df0.values == df1.values).any(axis=0)
輸出:
array([ True, False, True] )
uj5u.com熱心網友回復:
如果你想要一個快速的使用串列理解的單行本:
[df1[i] in df0[i].unique() for i in df1.index]/code>
而如果它需要成為一個陣列:
np.array([df1[i] in df0[i].unique() for i in df1.index])
<
輸出是:
array([ True, False, True])
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/326884.html
標籤:
