python - 过滤数据框以创建另一个数据框
问题描述
我已经有一个数据框,类似于
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
and 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]
推荐阅读
- codenameone - CN1如何选择IMEI?
- http - 从 ASP.Net Core 控制器下载带有 POST 的 PDF 时出现 ERR_CONNECTION_RESET
- c# - Linq 按日期范围分组
- typescript - lambdas 允许的额外属性,但函数不允许
- regex - 带有 unicode 字符的 Perl 正则表达式替换不起作用,我错过了什么?
- python - 有没有办法使用 openpyxl 在 Python 中删除或修改 xlsx (Excel) 图表?
- swift - 在扩展上声明泛型类型参数
- swift - 参照窗口添加菜单项
- css - 更改数据表过滤器下拉框的颜色
- python - 在 matplotlib 中创建带有自由 y 轴的箱形图的子图