我有这样的数据:
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现在我希望输出是这样的:
Keyword Name
0 d file1
2 a file1, file2 它是对应于每个“关键字”的最大“计数”的“名称”。如果最大计数有多个“Name”,则应该将这些“Name”组合在逗号分隔的字符串中。
我们总是可以这样做,将dataframe转换成python列表,但是我想出了一个更好的方法而不用list。
任何帮助都将不胜感激!
提前感谢!
发布于 2020-01-25 02:48:28
两步,
Groupby和lambda返回一个真假布尔值
然后是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 file1https://stackoverflow.com/questions/59905853
复制相似问题