簡體   English   中英

Pandas 遍歷行並構建新框架

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM