我有一个像这样的数据框:
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列表,但是我在想一种更好的方法,而不使用列表。
任何帮助将不胜感激!
谢谢!
答案 0 :(得分:1)
两个步骤,
Groupby
和lambda返回True False布尔值
,然后依次是Groupby
和agg
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