我有一個問題,目前我有以下資料框(這只是一個摘錄,實際上它會大得多(大約幾百萬行)。
topic keyword
0 String A String A
1 String A String B
3 String B String A
4 String B String B
5 String B String D
6 String C String D
...
現在我有點想保留第一個共現排序,如果字串 B 已經在“關鍵字”列中被“采用”,則它不能再出現在主題列中。如果這是第一次,請保留它。
topic keyword
0 String A String A
1 String A String B
3 String B String A -> Topic is already used in keyword, so delete it
4 String B String B -> Topic is already used in keyword, so delete it
5 String B String D -> Topic is already used in keyword, so delete it
6 String C String D
...
最后,我想要以下結果。
topic keyword
0 String A String A
1 String A String B
2 String C String D
...
我怎樣才能以最快的方式實作這一目標?
uj5u.com熱心網友回復:
您可以嘗試通過DataFrame.stack以下方式使用 reshape 洗掉重復項:
s = (df[['topic','keyword']].stack()
.drop_duplicates()
.unstack()['topic']
.reindex(df.index)
.ffill())
df = df[df['topic'].eq(s)]
print (df)
topic keyword
0 String A String A
1 String A String B
5 String C String D
uj5u.com熱心網友回復:
您可以使用 for 回圈來創建新的資料框:
new_rows = []
keywords = set()
for ind, row in df.iterrows():
if row['topic'] in keywords:
continue
keywords.add(row['keyword'])
new_rows.append(row)
# this new df is what you want
new_df = pd.DataFrame(new_rows)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/399319.html
上一篇:如何根據另一列中的較大值過濾行?
下一篇:設定(動態)字串等于函式的輸出
