[英]Pandas iterate over rows and build new frame
我有一個問題,目前我有例如以下 dataframe (這只是一個摘錄,實際上它會更大(大約幾百萬行)。
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
...
我怎樣才能以最快的方式實現這一目標?
您可以嘗試通過DataFrame.stack
刪除重復的重塑:
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
您可以使用 for 循環來創建新的 dataframe:
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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.