我有 2 個不相等列的資料框:
| 一個詞 | 多詞 |
|---|---|
| 鳥 | 沒有血的鳥 |
| 結石 | 殺死鳥的石頭 |
| 血液 | 沒有腦子的鳥 |
| <無> | 石頭和血 |
我正在嘗試用所有包含一個單詞的多詞來填充新的第三列。(5個或更少)所以它會像:
| 一個詞 | 多詞 | 一字多字 |
|---|---|---|
| 鳥 | 沒有血的鳥 | 沒有血的鳥,殺死鳥的石頭,沒有大腦的鳥 |
| 結石 | 殺死鳥的石頭 | 殺死鳥的石頭,石頭和血 |
| 血液 | 沒有腦子的鳥 | 沒有腦子的鳥,沒有血,石頭和血的鳥 |
| <無> | 石頭和血 |
我實際上找到了一種方法,但是它很慢。
在“多行”列中使用回圈。
1.1 在回圈內創建一個字典,其中鍵是“多詞”中的單元格,值是使用拆分創建的串列
在“一個單詞”列中使用回圈
2.1 在回圈內創建另一個回圈在 1.1 中的字典的鍵、值
2.2.在這些 to 回圈中檢查 1.1 中的串列是否包含一個單詞中的單詞
2.3 如果是 - 將第三列中的相應單元格與條件下的字典鍵連接起來,則連接數為 5 或更少。
我實際上是在遍歷資料框列單元格,并從中創建字典和串列,我讀到的內容非常非常糟糕。
我是 Python 的新手,但我很確定我的方式是邪惡的。
必須有更好、更快、更清潔的方法。也許與矢量化有關?
謝謝!
uj5u.com熱心網友回復:
您可以使用iterrows回圈您的 df 行并構建包含Many-Words串列One-word:
df["Many-Words with One-word"] = pd.Series([
df[df["Many-Words"].str.lower().str.contains(row["One-word"].lower())]["Many-Words"].to_list()
for _, row in df.iterrows()
])
注意:使用lower使匹配不區分大小寫。
輸出:
One-word Many-Words Many-Words with One-word
0 Bird Bird with no blood [Bird with no blood, Stone that killed the bir...
1 Stone Stone that killed the bird [Stone that killed the bird, stone and blood]
2 Blood Bird without brains [Bird with no blood, stone and blood]
3 <none> stone and blood []
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/526619.html
標籤:Python熊猫数据框
