pandas官方文档中cookbook(3)的selection&new column&multiindexing翻译
来源:互联网 发布:三维人像建模软件 编辑:程序博客网 时间:2024/06/08 10:15
文档版本:0.20.3
这些例子是用python3.4写出来的。对于较早的python版本需要对代码做些相应的调整。
Pandas(pd)和Numpy(np)是唯一两个默认导入的包。其余的包会显示导入给新用户看。这份文档中的例子都是从Stack-Overflow和Github中别人提问的比较经典的问题,作者从中进行提炼与总结。
若有翻译不当的地方,请多多指教。
选取
数据框
同时使用列标签和值判断条件进行索引
In [27]: df = pd.DataFrame(....: {'AAA' : [4,5,6,7], 'BBB' : [10,20,30,40],'CCC' : [100,50,-30,-50]}); df....: Out[27]: AAA BBB CCC0 4 10 1001 5 20 502 6 30 -303 7 40 -50In [28]: df[(df.AAA <= 6) & (df.index.isin([0,2,4]))]Out[28]: AAA BBB CCC0 4 10 1002 6 30 -30
使用loc对索引标签和iloc对索引位置进行切片
In [29]: data = {'AAA' : [4,5,6,7], 'BBB' : [10,20,30,40],'CCC' : [100,50,-30,-50]}In [30]: df = pd.DataFrame(data=data,index=['foo','bar','boo','kar']); dfOut[30]: AAA BBB CCCfoo 4 10 100bar 5 20 50boo 6 30 -30kar 7 40 -50
这里有2中显示切片的方法,在三种情况下:
1.以位置为导向的索引(Python切片风格:该切片前闭后开)
2.以索引名为导向的索引(非Python切片风格:该切片前闭后闭)
3.一般索引
In [31]: df.loc['bar':'kar'] #LabelOut[31]: AAA BBB CCCbar 5 20 50boo 6 30 -30kar 7 40 -50# GenericIn [32]: df.iloc[0:3]Out[32]: AAA BBB CCCfoo 4 10 100bar 5 20 50boo 6 30 -30In [33]: df.loc['bar':'kar']Out[33]: AAA BBB CCCbar 5 20 50boo 6 30 -30kar 7 40 -50
当索引由不从零开始或不安最小单位增长的整数组成的时,就会出现混乱。
In [34]: df2 = pd.DataFrame(data=data,index=[1,2,3,4]); #Note index starts at 1.In [35]: df2.iloc[1:3] #Position-orientedOut[35]: AAA BBB CCC2 5 20 503 6 30 -30In [36]: df2.loc[1:3] #Label-orientedOut[36]: AAA BBB CCC1 4 10 1002 5 20 503 6 30 -30
使用‘~’符号获得标记的剩余部分(也就是反向操作)
In [37]: df = pd.DataFrame(....: {'AAA' : [4,5,6,7], 'BBB' : [10,20,30,40], 'CCC' : [100,50,-30,-50]}); df....: Out[37]: AAA BBB CCC0 4 10 1001 5 20 502 6 30 -303 7 40 -50In [38]: df[~((df.AAA <= 6) & (df.index.isin([0,2,4])))]Out[38]: AAA BBB CCC1 5 20 503 7 40 -50In [37]: df = pd.DataFrame(....: {'AAA' : [4,5,6,7], 'BBB' : [10,20,30,40], 'CCC' : [100,50,-30,-50]}); df....: Out[37]: AAA BBB CCC0 4 10 1001 5 20 502 6 30 -303 7 40 -50In [38]: df[~((df.AAA <= 6) & (df.index.isin([0,2,4])))]Out[38]: AAA BBB CCC1 5 20 503 7 40 -50
创建新列
使用applymap高效、动态地创建一个新列
In [48]: df = pd.DataFrame(....: {'AAA' : [1,2,1,3], 'BBB' : [1,1,2,2], 'CCC' : [2,1,3,1]}); df....: Out[48]: AAA BBB CCC0 1 1 21 2 1 12 1 2 33 3 2 1In [49]: source_cols = df.columns # or some subset would work too.In [50]: new_cols = [str(x) + "_cat" for x in source_cols]In [51]: categories = {1 : 'Alpha', 2 : 'Beta', 3 : 'Charlie' }In [52]: df[new_cols] = df[source_cols].applymap(categories.get);dfOut[52]: AAA BBB CCC AAA_cat BBB_cat CCC_cat0 1 1 2 Alpha Alpha Beta1 2 1 1 Beta Alpha Alpha2 1 2 3 Alpha Beta Charlie3 3 2 1 Charlie Beta Alpha
在对数据框分组后对其中一列使用min()函数操作并保存其他列不是取最小值。
In [53]: df = pd.DataFrame(....: {'AAA' : [1,1,1,2,2,2,3,3], 'BBB' : [2,1,3,4,5,1,2,3]}); df....: Out[53]: AAA BBB0 1 21 1 12 1 33 2 44 2 55 2 16 3 27 3 3
方法1:用idxmin()获取最小值所在列的索引
In [54]: df.loc[df.groupby("AAA")["BBB"].idxmin()]Out[54]: AAA BBB1 1 15 2 16 3 2
方法2:先排序然后取每个分组的第一个值
In [55]: df.sort_values(by="BBB").groupby("AAA", as_index=False).first()Out[55]: AAA BBB0 1 11 2 12 3 2
注意结果虽然一样,不过索引不一样。
层次化索引
从一个含有标签的数据框中创建一个多重索引
In [56]: df = pd.DataFrame({'row' : [0,1,2],....: 'One_X' : [1.1,1.1,1.1],....: 'One_Y' : [1.2,1.2,1.2],....: 'Two_X' : [1.11,1.11,1.11],....: 'Two_Y' : [1.22,1.22,1.22]}); df....: Out[56]: One_X One_Y Two_X Two_Y row0 1.1 1.2 1.11 1.22 01 1.1 1.2 1.11 1.22 12 1.1 1.2 1.11 1.22 2# 设置索引In [57]: df = df.set_index('row');dfOut[57]: One_X One_Y Two_X Two_Yrow 0 1.1 1.2 1.11 1.221 1.1 1.2 1.11 1.222 1.1 1.2 1.11 1.22# With Hierarchical ColumnsIn [58]: df.columns = pd.MultiIndex.from_tuples([tuple(c.split('_')) for c in df.columns]);dfOut[58]: One Two X Y X Yrow 0 1.1 1.2 1.11 1.221 1.1 1.2 1.11 1.222 1.1 1.2 1.11 1.22# Now stack & ResetIn [59]: df = df.stack(0).reset_index(1);dfOut[59]: level_1 X Yrow 0 One 1.10 1.200 Two 1.11 1.221 One 1.10 1.201 Two 1.11 1.222 One 1.10 1.202 Two 1.11 1.22# And fix the labels (Notice the label 'level_1' got added automatically)In [60]: df.columns = ['Sample','All_X','All_Y'];dfOut[60]: Sample All_X All_Yrow 0 One 1.10 1.200 Two 1.11 1.221 One 1.10 1.201 Two 1.11 1.222 One 1.10 1.202 Two 1.11 1.22
阅读全文
0 0
- pandas官方文档中cookbook(3)的selection&new column&multiindexing翻译
- pandas官方文档cookbook(5)中MissValue&groupby翻译
- pandas官方文档中cookbook(1)的idioms的翻译
- pandas官方文档中cookbook(2)的split&building criteria翻译
- pandas官方文档cookbook(4)中Arithmetic&Slicing&Sorting翻译
- pandas官方文档cookbook(6)中Split&Pivot&Apply翻译
- 十分钟掌握pandas(pandas官方文档翻译)
- FMDB官方文档的翻译
- 对官方文档中NSAutoreleasePool的个人翻译
- 3D Touch 的官方文档翻译及个人总结
- Realm Objective‑C 2.4.3 官方文档的翻译
- Fragment的用法(官方文档的翻译)
- erlang的官方文档部分翻译
- linux官方文档翻译--Kconfig的语法
- linux官方文档翻译 -- Makefile的语法
- android自定义控件官方文档的翻译
- Activity的onPause()官方文档翻译
- angular-seed的官方文档翻译
- python3 GUI 开发 (1)环境配置
- POJ 1273 Drainage Ditches(最大流入门)
- HDU-4686 Arc of Dream(推公式+矩阵快速幂)
- 2017/7/30
- 九、Java中变量的使用规则
- pandas官方文档中cookbook(3)的selection&new column&multiindexing翻译
- uva 1225 Digit Counting
- linked-list-cycle-ii
- 局域网内服务端提供一个目录,客户端选择指定文件并进行下载
- linux下c++sleep函数
- Git常用操作系列(2)
- bzoj2391Cirno的忧郁 treap+三角剖分
- Java基础
- static(静态)变量