熊猫数据框-数据提取

时间:2020-01-25 02:28:32

标签: python-3.x pandas dataframe

我有一个像这样的数据框:

library(tidyverse)
enframe(test) %>%  unnest_longer(value)

# A tibble: 6 x 2
#  name  value
#  <chr> <chr>
#1 A     1    
#2 A     2    
#3 A     3    
#4 B     4    
#5 B     5    
#6 B     6   

现在,如果您根据“关键字”和“名称”对它们进行分组,并进行如下计数::

   Name    Keyword
0  file1   d
1  file2   a
2  file1   a
3  file1   d
4  file2   d

a = [['file1','d'],['file2','a'],['file1','a'],['file1','d'],['file2','d']]

b = pd.DataFrame.from_records(a).rename({0:"Name",1:"Keyword"}, axis = 1)

我们会得到这样的东西:

b[["Keyword", "Name"]].groupby(["Keyword", "Name"]).size().reset_index().rename({0:"Count"},axis =1)

现在我希望输出如下:

   Keyword  Name    Count
0  d        file1   2
1  d        file2   1
2  a        file1   1
3  a        file2   1

哪个是与每个“关键字”的最大“计数”相对应的“名称”。 并且,如果有最多最大数量的“名称”,则应将这些“名称”组合成一个逗号分隔的字符串。

我们总是可以将数据帧转换为python列表,但是我在想一种更好的方法,而不使用列表。

任何帮助将不胜感激!

谢谢!

1 个答案:

答案 0 :(得分:1)

两个步骤,

Groupby和lambda返回True False布尔值

,然后依次是Groupbyagg

s = df.groupby('Keyword')['Count'].apply(lambda x : x.eq(x.max()))

df2 = df.loc[s].groupby(['Keyword'])['Name'].agg(','.join).reset_index()

print(df2)

 Keyword         Name
0       a  file1,file2
1       d        file1