Python 基于多条件的切片数据帧

Python 基于多条件的切片数据帧,python,pandas,dataframe,for-loop,filter,Python,Pandas,Dataframe,For Loop,Filter,我希望你做得很好。我有一个关于Python中的数据帧的问题 公司 职位名称 人名 苹果 创始人 史蒂夫 乔布斯 苹果 共同创办人 史蒂夫·沃兹尼亚克 微软 创始人 比尔盖茨 微软 共同创办人 保罗·艾伦 贝宝 共同创办人 彼得·泰尔 特斯拉 董事会成员 拉里·埃里森 特斯拉 首席财务官 扎克·柯克霍恩 阅后即焚 德文·费尔曼 德文·费尔曼 您可以在此处使用pd.Category: df['Job Title'] = pd.Categorical(df['Job Title'].str.strip

我希望你做得很好。我有一个关于Python中的数据帧的问题

公司 职位名称 人名 苹果 创始人 史蒂夫 乔布斯 苹果 共同创办人 史蒂夫·沃兹尼亚克 微软 创始人 比尔盖茨 微软 共同创办人 保罗·艾伦 贝宝 共同创办人 彼得·泰尔 特斯拉 董事会成员 拉里·埃里森 特斯拉 首席财务官 扎克·柯克霍恩 阅后即焚 德文·费尔曼 德文·费尔曼
您可以在此处使用
pd.Category

df['Job Title'] = pd.Categorical(df['Job Title'].str.strip(),
                                 categories=['Founder', 'Co-Founder', 'Board Member', 'CFO'],
                                 ordered=True
                                )

df.sort_values(['Job Title']).drop_duplicates('Company').dropna()
输出:

      Company     Job Title    Person Name
0      Apple        Founder     Steve Jobs
2  Microsoft        Founder     Bill Gates
4     Paypal     Co-Founder    Peter Thiel
5      Tesla   Board Member  Larry Ellison

首先,我将创建一个额外的列
Aux
,这有助于提高
职位的优先级。假设示例数据帧定义为
df

aux = {'Job Title':['Founder','Co-Founder','Board Member','CFO'],'Rank':[1,2,3,4]}
df['Rank'] = df['Job Title'].merge(aux,on='Job Title')
df_filtered = df.groupby('COMPANY')['Rank'].min().reset_index().merge(aux,on='Rank').drop(columns='Rank')

创建职位排名词典。映射到职务名称。删除任何不在职级中的职务。对值进行排序并删除重复的公司

 d={'Founder':1,'Co-Founder':2,'Board Member':3,'Board Member CFO':4}
 df=df.assign(rank=df['JOB TITLE'].map(d)).sort_values(by='rank').dropna().drop_duplicates(subset=['COMPANY']).drop('rank', 1)

     COMPANY     JOB TITLE    PERSON NAME  rank
0      Apple       Founder     Steve Jobs     1
2  Microsoft       Founder     Bill Gates     1
4     Paypal    Co-Founder    Peter Thiel     2
5      Tesla  Board Member  Larry Ellison     3

这真的很好,谢谢:)广黄,让我们假设贝宝有另一位联合创始人,名叫迈克。您的代码会选择哪位联合创始人?如果它会选择第一次出现,那么有没有办法让它在其中一个选择中随机选择?因此,在某些情况下,它会选择第一位联合创始人,在其他情况下,如果我们没有创始人的数据,它会选择第二位或第三位联合创始人。
df.sample(frac=1)。sort_值(['Job Title',],kind='mergesort')…
@Quang Hoang谢谢,但据我所知,mergesort并不是完全随机的。是否有其他方法通过导入随机数据来实现这一点?这篇文章可能有点类似,但我无法将这些点联系起来@AmmarKamran随机性来自
样本
。你说得对,
mergesort
是稳定的。在
sample
上使用
mergesort
是为了保留
sample
产生的随机性。我也会尝试这种方法。谢谢。如果我有更多问题,谢谢你会尝试跟进。如果需要,很高兴提供任何解释。假设Paypal还有另一位联合创始人Mike。您的代码会选择哪位联合创始人?如果它会选择第一次出现,那么有没有办法让它在其中一个选择中随机选择?因此,在某些情况下,它会选择第一位联合创始人,在其他情况下,如果我们没有创始人的数据,它会选择第二位或第三位联合创始人。@Ammar Kamran常见的情况是,如果一个答案适合最初提出的问题,那么在修改问题之前,至少会进行一次投票。对于修改后的问题,我们可以按列名或其他列的组合对_值进行排序,以获得合适的结果。我不认为我们不做循环就可以实现随机选择。请考虑对答案进行初步投票,以感谢其他人的努力,以帮助您的代码也起作用。谢谢。很抱歉,我对这个社区仍然很陌生,并且在学习过程中不断学习常见的做法。