[英]Python Find the words in the set have word pairs on dataframe
我有套話
{'DNA',
'pada',
'yang',...}
我正在嘗試查找集合中的單詞是否在以下二元組數據框中具有單詞對
bigramf freq
0 (DNA, yang) 15
1 (DNA, dalam) 6
2 (DNA, ini) 5
3 (DNA, memiliki) 4
4 (DNA, unting) 4
5 (pada, DNA) 4
6 (pada, urutan) 3
7 (yang, diperoleh) 3
8 (yang, lebih) 3
9 (pada, sejumlah) 2
10 (pada, RNA) 2
11 (pada, satu) 2
12 (yang, berbeda) 2
13 (yang, sama) 2
14 (yang, tumpang) 2
如果是這樣,那么預期的輸出將是這樣的:
yang [('lebih', 3), ('diperoleh', 3), ('berbeda', 2), ('tumpang', 2), ('sama', 2)]
DNA [('yang', 15), ('dalam', 6), ('ini', 5), ('memiliki', 4), ('unting', 4)]
pada [('DNA', 4), ('urutan', 3), ('sejumlah', 2), ('RNA', 2), ('satu', 2)]
我怎么找?。 任何人都可以幫忙嗎? 謝謝。 任何幫助深表感謝。
首先將帶有元組的列轉換為新的 2 列(不要使用apply(pd.Series)
,因為slow
),然后在boolean indexing
按Series.isin
過濾匹配的值,並將GroupBy.apply
值轉換為元組列表:
s = {'DNA',
'pada',
'yang'}
df[['s', 'v']] = pd.DataFrame(df['bigramf'].tolist(), index=df.index)
s = df[df['s'].isin(s)].groupby('s')['v','freq'].apply(lambda x: list(map(tuple, x.values)))
print (s)
s
DNA [(yang, 15), (dalam, 6), (ini, 5), (memiliki, ...
pada [(DNA, 4), (urutan, 3), (sejumlah, 2), (RNA, 2...
yang [(diperoleh, 3), (lebih, 3), (berbeda, 2), (sa...
dtype: object
如果需要字典添加Series.to_dict
:
d = s.to_dict()
print (d)
{'DNA': [('yang', 15), ('dalam', 6), ('ini', 5), ('memiliki', 4), ('unting', 4)],
'pada': [('DNA', 4), ('urutan', 3), ('sejumlah', 2), ('RNA', 2), ('satu', 2)],
'yang': [('diperoleh', 3), ('lebih', 3), ('berbeda', 2), ('sama', 2), ('tumpang', 2)]}
collections.defaultdict
另一個解決方案:
from collections import defaultdict
d = defaultdict(list)
for (s1, v1), f1 in df.to_numpy():
if s1 in s:
d[s1].append((v1, f1))
d = dict(d)
print (d)
{'DNA': [('yang', 15), ('dalam', 6), ('ini', 5), ('memiliki', 4), ('unting', 4)],
'pada': [('DNA', 4), ('urutan', 3), ('sejumlah', 2), ('RNA', 2), ('satu', 2)],
'yang': [('diperoleh', 3), ('lebih', 3), ('berbeda', 2), ('sama', 2), ('tumpang', 2)]}
我所做的是匹配單詞
我遍歷數據框並獲取每個元素並將其傳遞給像這樣的 def
def match_words(actual_word, word):
return set(actual_word.split()).intersection(word.split())
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.