我有一個這樣的資料框架:
我有一個這樣的資料框架。
text, pred score logits
不,謝謝你。 正面[[0, 0, 1], [1, 0, 2], , [1, 0, 0 ]] [0.01, 0.02, 0.97] ]
他們沒有回應我的否定[[], [0, 1, 0], [], [] ] 。 [0.81, 0.10, 0.18]
其中,你可以使用這個:
df = pd.DataFrame({'text':['No thank you', '他們沒有否定我']。
'pred':['positive', 'negative']。
'score':['[0, 0, 1], [1, 0, 2], [1, 0, 0]]', '[], [0, 1, 0], []'] 。
'logits':['[0.01, 0.02, 0.97]', [0.81, 0.10, 0.18]']})
我需要做的是:
如果df['pred'] = 'positive'我想對該行的score的第一個位置的所有元素進行求和sum(df['score'][0]),它是(0 1 1)并通過logits的第三個元素進行乘法df['logits'>[2]它是(0。 97)。
(我們將對負數做同樣的事情,只是改變位置。
sum(df['score'][1]),它是1 0 0 0,然后乘以logits的第一個元素,即df['logits'][1],它是0.81
因此,輸出將看起來像這樣:
text, pred score logits decision
不,謝謝你。 正面[[0, 0, 1], [1, 0, 2], [1, 0, 0] ] [0.01, 0.02, 0.97] 1.94]。
他們沒有回應我的否定[[], [0, 1, 0], [], [] ] 。 [0.81, 0.10, 0.18] 0.81
我做了什么(或我需要遵循的邏輯),顯然我的代碼沒有運行,我猜問題出在這里 sum(df['score'][0]).
df[df['pred'] == 'positive'。 'decision'] = df[df['pred'] == 'positive', df['logits'][2] * sum(df['score'][0] ) ]
為了更加清晰
<在評分中,我們有一個與每個單詞相關的串列。這就是為什么第一行有三個串列,第二行有四個串列。它們只不過是與每個詞相關的(正、負、中性)得分。如果串列為空,我們在計算中就將其替換為零。
uj5u.com熱心網友回復:
一個可能的解決方案是創建具有各種規則的映射字典(例如,如果是正數,只計算第一個索引(0)等等):
m_sum = {"positive"/span>。0, "positive": 1}。
m_mul = {"正": 2, "positive": 0}。
df["decision"] = df.apply(
lambda x: sum(v[m_sum[x["pred"]]) for v in x["score"/span>] if v)
* x["logits"][m_mul[x["pred"]]。
axis=1,
)
print(df)
列印:
text, pred score logits decision
0 不,謝謝你。 正面 [[0, 0, 1], [1, 0, 2], [1, 0, 0]] 。 [0.01, 0.02, 0.97] 1.94
1 他們沒有對我作出否定的回應[[], [0, 1, 0], [], []] ] 。 [0.81, 0.1, 0.18] 0.81
編輯:用ast.literal_eval:
import pandas as pd
from ast import literal_eval
df = pd.DataFrame(
{
"text": ["No thank you", "They didnt respond me negative"] 。
"預測": ["正面", "負面"]。
"score": [
"[[0, 0, 1], [1, 0, 2], [1, 0, 0]]"。
"[[], [0, 1, 0], [], [] ]",
],
"logits": ["[0.01, 0.02, 0.97]", "[0.81, 0.10, 0.18]"]。
}
)
df["score"] = df["score"].apply(literal_eval)
df["logits"] = df["logits"].apply(literal_eval)
m_sum = {"正": 0, "positive": 1}。
m_mul = {"正": 2, "positive": 0}。
df["decision"] = df.apply(
lambda x: sum(v[m_sum[x["pred"]]) for v in x["score"/span>] if v)
* x["logits"][m_mul[x["pred"]]。
axis=1,
)
print(df)
列印:
text pred score logits decision
0 不,謝謝你 積極 [[0, 0, 1], [1, 0, 2], [1, 0, 0]] [0.01, 0.02, 0.97] 1.94
1 他們沒有對我作出回應 負面 負面 [[], [0, 1, 0], [], []] ] 。 [0.81, 0.1, 0.18] 0.81
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/307681.html
標籤:
上一篇:計算多個日期之間的平均時間
