我正在使用帶有兩列字串串列的資料框,我需要知道串列的所有元素是否都包含在另一個串列中。
最初我的值是字串,這是一個例子:
df1
num
0 [10 2]
1 [120]
2 [2 5 8]
df2
num
0 [10 2]
1 [60]
2 [2 5]
然后我曾經df1['num'].str.split()將字串中的元素放入一個串列中:
df1
num
0 [10, 2]
1 [120]
2 [2, 5, 8]
之后我嘗試使用all(item in df1['num'].str.split() for item in df2['num'].str.split())
但它輸出:
TypeError: unhashable type: 'list'
理想的輸出是:
0 True
1 False
2 True
我怎樣才能做到這一點?
uj5u.com熱心網友回復:
import pandas as pd
df1 = pd.DataFrame({
'num': [['10', '2'], ['120'], ['2', '5', '8']]
})
df2 = pd.DataFrame({
'num': [['10', '2'], ['60'], ['2', '5']]
})
df1_str = pd.DataFrame(df1['num'].str)
df2_str = pd.DataFrame(df2['num'].str)
lst = [all(df2_str[col].isin(df1_str[col])) for col in df2_str.columns]
print(lst)
uj5u.com熱心網友回復:
您可以在此處使用集合操作:
pd.Series([set(a)>=set(b) for a,b in zip(df1['num'], df2['num'])], index=df1.index)
輸出:
0 True
1 False
2 True
dtype: bool
或分配給資料框之一:
df1['test'] = [set(a)>=set(b) for a,b in zip(df1['num'], df2['num'])]
輸出:
num test
0 [10, 2] True
1 [120] False
2 [2, 5, 8] True
uj5u.com熱心網友回復:
使用issubset將值從轉換df1['num']為sets 的方法:
df1['new'] = [set(b).issubset(a) for a,b in zip(df1['num'], df2['num'])]
print (df1)
num new
0 [10, 2] True
1 [120] False
2 [2, 5, 8] True
如果值未拆分,則通過以下方式修改解決方案:
df1['test'] = [set(b.split()).issubset(a.split()) for a,b in zip(df1['num'], df2['num'])]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/461313.html
下一篇:根據自定義向量對資料框進行排序
