我有以下資料框,其中包含比賽的分數以及計算每個人輸入的數字的列。
import pandas as pd
df = pd.DataFrame({'Name': ['John', 'Jim', 'John','Jim', 'John','Jim','John','Jim','John','Jim','Jack','Jack','Jack','Jack'],'Score': [10,8,9,3,5,0, 1, 2,3, 4,5,6,8,9]})
df['Entry_No'] = df.groupby(['Name']).cumcount() 1
df

然后我有另一個表存盤每個人可以擁有的最大條目數的資料:
df2 = pd.DataFrame({'Name': ['John', 'Jim', 'Jack'],'Limit': [2,3,1]})
df2

我試圖從df條目號大于Limit每個人的行中洗掉行,df2以便我的預期輸出是這樣的:

如果對如何幫助我實作這一目標有任何想法,那就太好了!謝謝
uj5u.com熱心網友回復:
您可以使用pandas.merge創建另一個資料框并根據您的條件洗掉列:
df3 = pd.merge(df, df2, on="Name", how="left")
df3[df3["Entry_No"] <= df3["Limit"]][df.columns].reset_index(drop=True)
Name Score Entry_No
0 John 10 1
1 Jim 8 1
2 John 9 2
3 Jim 3 2
4 Jim 0 3
5 Jack 5 1
我曾經how="left"保持順序df并reset_index(drop=True)重置結果資料幀的索引。
uj5u.com熱心網友回復:
您可以join使用 2 個資料框,然后使用以下條件洗掉:
import pandas as pd
df = pd.DataFrame({'Name': ['John', 'Jim', 'John','Jim', 'John','Jim','John','Jim','John','Jim','Jack','Jack','Jack','Jack'],'Score': [10,8,9,3,5,0, 1, 2,3, 4,5,6,8,9]})
df['Entry_No'] = df.groupby(['Name']).cumcount() 1
df2 = pd.DataFrame({'Name': ['John', 'Jim', 'Jack'],'Limit': [2,3,1]})
df2 = df2.set_index('Name')
df = df.join(df2, on='Name')
df.drop(df[df.Entry_No>df.Limit].index, inplace = True)
給出預期的輸出
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/527457.html
標籤:Python熊猫
