有没有办法切片将“标签数组”与“对象切片”混合的pandas数据帧。 我在这里找不到一个例子Indexing and Selecting Data
标签列表或数组['a','b','c']
标签为'a'的切片对象:'f'
以下是我尝试做的一个示例,而不是手动列出所有内容。
import pandas as pd
data = {'Week': [201301, 201301, 201302, 201302, 201303],
'Product': ['coke', 'fanta', 'coke' ,'sprite' ,'pepsi'],
'month1': [12, 1, 3, 12, 11],'month2': [12, 1, 3, 12, 11],
'month3': [12, 1, 3, 12, 11],'month4': [12, 1, 3, 12, 11],
'month5': [12, 1, 3, 12, 11]}
df = pd.DataFrame(data)
print df
输出:
Product Week month1 month2 month3 month4 month5
0 coke 201301 12 12 12 12 12
1 fanta 201301 1 1 1 1 1
2 coke 201302 3 3 3 3 3
3 sprite 201302 12 12 12 12 12
4 pepsi 201303 11 11 11 11 11
df= df.loc[:,'Product':'month1']
输出:
Product Week month1
0 coke 201301 12
1 fanta 201301 1
2 coke 201302 3
3 sprite 201302 12
4 pepsi 201303 11
print df
我想输出的是:
Product Week month1 month4 month5
0 coke 201301 12 12 12
1 fanta 201301 1 1 1
2 coke 201302 3 3 3
3 sprite 201302 12 12 12
4 pepsi 201303 11 11 11
我如何操纵这行代码:
df= df.loc[:,'Product':'month1']
是这样的(但有效):
df= df.loc[:,['Product':'month1'] and ['month4','month5']]
答案 0 :(得分:2)
使用一些内部方法。基本上构造所需的索引,然后使用.loc
将其选中。
In [21]: df.loc[:,pd.Index(['Product','Week']) + df.columns[df.columns.slice_indexer('month2','month4')]]
Out[21]:
Product Week month2 month3 month4
0 coke 201301 12 12 12
1 fanta 201301 1 1 1
2 coke 201302 3 3 3
3 sprite 201302 12 12 12
4 pepsi 201303 11 11 11
[5 rows x 5 columns]
答案 1 :(得分:1)
您还可以通过连接一些初步数据帧来实现这一目标:
print pd.concat([df.ix[:,"Product":"Week"], df.ix[:,("month1", "month4","month5")]],axis=1)
我认为这种方法更容易。