Neb*_*der 7 python series pandas
我有以下列的数据框:
Name, Surname, dateOfBirth, city, country
Run Code Online (Sandbox Code Playgroud)
我有兴趣找到名称和姓氏最常见的组合以及它的发生程度.很高兴能看到十大组合的列表.
我最重要的想法是:
mostFreqComb= df.groupby(['Name','Surname'])['Name'].count().argmax()
Run Code Online (Sandbox Code Playgroud)
但我认为它没有给我正确答案.非常感谢帮助!
谢谢,纳布
有关以下解决方案的性能影响,请参阅Pandas groupby.size与series.value_counts vs collections.Counter有多个系列.它们首先以最佳性能呈现在下面.
GroupBy.size您可以使用以下命令创建一系列带有(Name,Surname)元组索引的计数GroupBy.size:
res = df.groupby(['Name', 'Surname']).size().sort_values(ascending=False)
Run Code Online (Sandbox Code Playgroud)
通过对这些值进行排序,我们可以轻松地提取最常见的值:
most_common = res.head(1)
most_common_dups = res[res == res.iloc[0]].index.tolist() # handles duplicate top counts
Run Code Online (Sandbox Code Playgroud)
value_counts另一种方法是构造一系列元组,然后应用pd.Series.value_counts:
res = pd.Series(list(zip(df.Name, df.Surname))).value_counts()
Run Code Online (Sandbox Code Playgroud)
结果将是由Name-Surname组合索引的一系列计数,从最常见到最少排序.
name, surname = res.index[0] # return most common
most_common_dups = res[res == res.max()].index.tolist()
Run Code Online (Sandbox Code Playgroud)
collections.Counter如果您希望创建(name, surname): counts条目词典,可以通过以下方式完成collections.Counter:
from collections import Counter
zipper = zip(df.Name, df.Surname)
c = Counter(zipper)
Run Code Online (Sandbox Code Playgroud)
Counter有一些有用的方法most_common,您可以使用它们来提取结果.
| 归档时间: |
|
| 查看次数: |
741 次 |
| 最近记录: |