此文总结如何根据位置索引,标签索引等选定制定行、列或元素。
持续更新中
Updated: 2022 / 7 / 26
Python | Pandas | excel透视表在多索引下选定指定列、行、元素
示例数据
# example
'''
print(data.head())
user uid ... province city
0 553217640 6376967.0 ... 广西 南宁市
1 553217639 6376967.0 ... 广西 南宁市
2 553217638 6571870.0 ... 浙江省 杭州市
3 553217637 7215034.0 ... 陕西省 NaN
4 553217636 7190777.0 ... 云南省 昆明市
.. ... ... ... ... ...
995 553216645 7213860.0 ... 黑龙江省 牡丹江市
996 553216644 7213860.0 ... 黑龙江省 牡丹江市
997 553216643 6714086.0 ... 四川省 NaN
998 553216642 6714086.0 ... 四川省 NaN
999 553216641 125825.0 ... 云南省 NaN
[1000 rows x 11 columns]
##########################################################################
print(data.columns)
Index(['user', 'uid', 'title', 'docid', 'time', 'status', 'score', 'qudao',
'kffs', 'province', 'city'],
dtype='object')
'''
透视表
示例
此处,‘province’ 和 ’uid‘ 作为index, ‘kffs’ 作为column。
pivot = data.pivot_table(
index=['province', 'uid'],
columns='kffs',
values=['docid', 'score'],
aggfunc={'docid': 'count', 'score': 'median'},
fill_value=0,
)
'''
print(pivot)
docid score
kffs 1 2 1 2
province uid
云南省 125825.0 1 0 0.0 0.0
6331762.0 4 0 1.4 0.0
6724869.0 2 0 0.0 0.0
7088853.0 1 1 0.0 1.5
7119058.0 2 0 1.5 0.0
... ... .. ... ...
黑龙江省 7213860.0 6 0 1.5 0.0
7213955.0 2 0 1.1 0.0
7216948.0 4 0 1.5 0.0
7216960.0 6 0 1.0 0.0
7216985.0 4 0 1.8 0.0
[278 rows x 4 columns]
列
标签
标签组
取列索引。
'''
print(pivot.columns)
MultiIndex([('docid', 1),
('docid', 2),
('score', 1),
('score', 2)],
names=[None, 'kffs'])
'''
指定标签
单列
1. loc
col1 = pivot.loc[:, [('score', 1)]]
'''
print(len(col1.columns))
1
############################################
print(col1)
score
kffs 1
province uid
云南省 125825.0 0.0
6331762.0 1.4
6724869.0 0.0
7088853.0 0.0
7119058.0 1.5
... ...
黑龙江省 7213860.0 1.5
7213955.0 1.1
7216948.0 1.5
7216960.0 1.0
7216985.0 1.8
[278 rows x 1 columns]
'''
2.
col1 = pivot[('score', 2)]
'''
print(col1)
province uid
云南省 125825.0 0.0
6331762.0 0.0
6724869.0 0.0
7088853.0 1.5
7119058.0 0.0
...
黑龙江省 7213860.0 0.0
7213955.0 0.0
7216948.0 0.0
7216960.0 0.0
7216985.0 0.0
Name: (score, 2), Length: 278, dtype: float64
'''
多列
1. loc
col2 = pivot.loc[:, ['score']]
'''
print(len(col2.columns))
2
############################################
print(col2)
score
kffs 1 2
province uid
云南省 125825.0 0.0 0.0
6331762.0 1.4 0.0
6724869.0 0.0 0.0
7088853.0 0.0 1.5
7119058.0 1.5 0.0
... ... ...
黑龙江省 7213860.0 1.5 0.0
7213955.0 1.1 0.0
7216948.0 1.5 0.0
7216960.0 1.0 0.0
7216985.0 1.8 0.0
[278 rows x 2 columns]
'''
2.
col2 = pivot[('score', )]
'''
print(col2)
kffs 1 2
province uid
云南省 125825.0 0.0 0.0
6331762.0 1.4 0.0
6724869.0 0.0 0.0
7088853.0 0.0 1.5
7119058.0 1.5 0.0
... ... ...
黑龙江省 7213860.0 1.5 0.0
7213955.0 1.1 0.0
7216948.0 1.5 0.0
7216960.0 1.0 0.0
7216985.0 1.8 0.0
[278 rows x 2 columns]
'''
索引位置
行
索引
索引组
取行索引。
'''
print(pivot.index)
MultiIndex([
...
('黑龙江省', 7080483.0),
('黑龙江省', 7185586.0),
('黑龙江省', 7203299.0),
('黑龙江省', 7208440.0),
('黑龙江省', 7213096.0),
('黑龙江省', 7213860.0),
('黑龙江省', 7213955.0),
('黑龙江省', 7216948.0),
('黑龙江省', 7216960.0),
('黑龙江省', 7216985.0)],
names=['province', 'uid'], length=278)
##############################################################
print(pivot.index.get_level_values(level=0).drop_duplicates())
Index(['云南省', '内蒙古', '吉林省', '四川省', '天津', '安徽省', '山西省', '广东省', '广西', '新疆',
'江苏省', '江西省', '河北省', '河南省', '浙江省', '海南省', '湖北省', '湖南省', '甘肃省', '贵州省',
'辽宁省', '重庆', '陕西省', '青海省', '黑龙江省'],
dtype='object', name='province')
##############################################################
print(pivot.index.get_level_values(level=1).drop_duplicates())
Float64Index([ 125825.0, 6331762.0, 6724869.0, 7088853.0, 7119058.0, 7119448.0,
7166576.0, 7190777.0, 7208339.0, 7213895.0,
...
7080483.0, 7185586.0, 7203299.0, 7208440.0, 7213096.0, 7213860.0,
7213955.0, 7216948.0, 7216960.0, 7216985.0],
dtype='float64', name='uid', length=278)
'''
指定索引
单行
index_index = pivot.loc['青海省', :]
'''
docid score
kffs 1 2 1 2
province uid
青海省 6258231.0 6 0 1.7 0.0
6991464.0 2 0 0.0 0.0
7112128.0 4 0 1.3 0.0
多行
index_index = pivot['青海省':'黑龙江省']
'''
docid score
kffs 1 2 1 2
province uid
青海省 6258231.0 6 0 1.7 0.0
6991464.0 2 0 0.0 0.0
7112128.0 4 0 1.3 0.0
黑龙江省 6981849.0 2 0 0.0 0.0
7080483.0 2 0 0.0 0.0
7185586.0 3 0 1.0 0.0
7203299.0 4 0 1.5 0.0
7208440.0 4 2 0.0 1.9
7213096.0 2 0 0.0 0.0
7213860.0 6 0 1.5 0.0
7213955.0 2 0 1.1 0.0
7216948.0 4 0 1.5 0.0
7216960.0 6 0 1.0 0.0
7216985.0 4 0 1.8 0.0
'''
位置索引
行 & 列
loc
index_column = pivot.loc[('黑龙江省', ['score'])]
'''
score
kffs 1 2
uid
6981849.0 0.0 0.0
7080483.0 0.0 0.0
7185586.0 1.0 0.0
7203299.0 1.5 0.0
7208440.0 0.0 1.9
7213096.0 0.0 0.0
7213860.0 1.5 0.0
7213955.0 1.1 0.0
7216948.0 1.5 0.0
7216960.0 1.0 0.0
7216985.0 1.8 0.0
'''
query
利用 df.query()
来取数 1,
比如 pivot.query('province = "黑龙江省"')]
参考文章
写此篇文章时有参考
pandas 读取或者选择某几列
用pandas中的DataFrame时选取行或列
使用pandas筛选出指定列值所对应的行