我已经有一个数据框,类似于
x label word
10 1 is
20 2 goal
15 2 left
13 0 am
9 1 are
7 0 I
6 1 hello
2 0 world
我正在尝试创建另一个数据框,一旦执行了从该数据框提取的操作,该数据框将如下所示:
label min max words
0 2 13 I, world, am
1 6 10 hello, are, is
2 15 20 goal, left
words
列中的单词可以任意顺序。它们代表该特定标签的单词。
我尝试使用df.groupby
,但我似乎不明白它是如何工作的。有人可以指导我寻找什么方法吗?
答案 0 :(得分:1)
在列名和聚合函数的字典中使用DataFrameGroupBy.agg
。然后在各列中获取MultiIndex
,因此需要将其展平-在这里分别用map
和join
进行平整,必要时在最后的rename
列中进行
df = df.groupby('label').agg({'x':['min','max'], 'word':', '.join})
df.columns = df.columns.map('_'.join)
d = {'x_min':'min','x_max':'max','word_join':'words'}
df = df.rename(columns=d).reset_index()
print (df)
label min max words
0 0 2 13 am, I, world
1 1 6 10 is, are, hello
2 2 15 20 goal, left
如果要将列word
汇总到list
s:
df = df.groupby('label').agg({'x':['min','max'], 'word': lambda x: x.tolist()})
df.columns = df.columns.map('_'.join)
d = {'x_min':'min','x_max':'max','word_<lambda>':'words'}
df = df.rename(columns=d).reset_index()
print (df)
label min max words
0 0 2 13 [am, I, world]
1 1 6 10 [is, are, hello]
2 2 15 20 [goal, left]