我有一個資料框架:
import pandas as pd
test_df = pd.DataFrame({
'_id': ['1a','2b','3c','4d'] 。
'column': ['und der in zu',
'Kompliziertereswort something',
'Lehrerin in zu [Buch]',
'Buch (Lehrerin) kompliziertereswort']})
和一個字典:
{'und'。20,
'der': 10,
'in': 40,
'zu': 10,
'Kompliziertereswort': 2,
'Buch': 5,
'Lehrerin': 5}。
我想在資料框架中添加一個新的列,代表該行中的單詞的平均值。如果該詞不在該詞典中,就應該直接忽略它。
_id column score
1a 和 der in zu 20
2b Kompliziertereswort something2
3c 學員 in zu [Buch] 15
4d Buch (Lehrerin) kompliziereswort5
我做了一些非常愚蠢的事情,我認為,即:把資料框架寫成一個文本檔案,讀取每一行;我做了一個字典中所有鍵的串列,然后用regex來檢查該行是否包含這些詞。可能因為有括號,所以沒有成功。
。我還試著分割資料框架行,但它只是把它分割成單獨的字母:
for index, values in test_df.iterrows() 。
pos=1
for x in values[1] 。
print(pos, x)
pos = 1: print(pos, x)
uj5u.com熱心網友回復:
首先你應該把你的字典轉換為一個資料框架:
d = {'und'/span>: 20, 'der': 10,'in'/span>: 40, 'zu': 10,'Compliziertereswort': 2, 'Buch': 5,'Lehrerin': 5}。
d_df = pd. DataFrame({'column':[k for k in d],'number': [d[k] for k in d]})
d_df
列數
und 20
der 10
在 40
zu 10
讀者人數2。
書籍 5
讀者5
然后使用pandas的explode()函式來分離列中的單詞,并與d_df連接:
test_df2 = test_df.set_index(['_id']) 。 apply(lambda x: x.str.split(' ').explode())。
test_df2 = pd.merge(test_df2,d_df,on='column', how='left')
_id列號
1a和20.0的1a
1a der10.0
1a in 40.0 2.
1a祖 10.0
2b Kompliziereswort 2.0 2b Kompliziereswort 2.0
2b 南方的東西
3c Lehrerin 5.0 3c 5.0
3c 在 40.0
3c祖 10.0
3c [Buch] nan
4d 布赫 5.0
4d (Lehrerin) nan
4d kompliziereswort nan
計算每個_id的平均數:
row_means = test_df2.groupby('_id')['number'].agg(['mean']).reset_index()
_id mean
1a 20.000000[/span
2b 2.000000[/span
3c 18.333333[/span
4d 5.000000[/span
現在你可以將row_means加入到主資料框架(test_df)中,并在其中加入mean列。
pd.merge(test_df,row_means,on='_id'/span>,how='left'/span>)
_id列平均值
1a und der in zu 20.000000
2b Kompliziertereswort something 2.000000[/span]。
3c Lehrerin in zu [Buch] 18.333333[/span]。
4d Buch (Lehrerin) kompliziereswort 5.000000[/span]。
uj5u.com熱心網友回復:
我們可以使用字典中的鍵來構造一個正則運算式模式,然后從每一行中提取這個模式的所有出現,然后映射字典中的分數d到匹配的字串,在level=0上取mean來得到平均數
pat = fr"({'|'.join(d)}) "
test_df['score'] = test_df['column'].str. extractall(pat)[0].map(d).mean(level=0)
結果
print(test_df)
_id列分數
0 1a und der in zu 20.0
1 2b Kompliziereswort something 2.0
2 3c Lehrerin in zu [Buch] 15.0[/span].
34d Buch (Lehrerin) kompliziereswort 5.0
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/311630.html
標籤:
