过滤一个数据框以创建另一个数据框

时间:2018-07-10 11:07:00

标签: python pandas

我已经有一个数据框,类似于

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,但我似乎不明白它是如何工作的。有人可以指导我寻找什么方法吗?

1 个答案:

答案 0 :(得分:1)

在列名和聚合函数的字典中使用DataFrameGroupBy.agg。然后在各列中获取MultiIndex,因此需要将其展平-在这里分别用mapjoin进行平整,必要时在最后的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]