我已经有一个数据框,类似于
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 ,但我似乎不明白它是如何工作的。有人可以指导我应该寻找什么方法吗?
最佳答案
使用DataFrameGroupBy.agg
通过列名和聚合函数的字典。然后在列中获取MultiIndex
,因此需要将其展平 - 这里通过map
和join
,最后如果需要重命名
列:
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
到列表
:
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]
关于python - 过滤数据框以创建另一个数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51263611/