限制Pandas Pivot中的列值

时间:2015-05-06 11:35:08

标签: python pandas

假设我有一些数据的索引映射到键值对,如下所示:

# create fake data
import pandas as pd
from StringIO import StringIO
data = '''
ID Time Flag Value
0 1:10 Start 10
0 1:11 Category Animal
0 1:13 Type Cat
0 1:13 End 13
'''
df1 = pd.read_table(StringIO(data),sep='\s+')

如果我使用Pandas Pivot,我可以将Flag列中的所有因素转换为单独的列:

df2 = df1.pivot(index = 'ID', columns = 'Flag', values = 'Value')

然而,这给了我所有键映射到单独的列,如下所示:

Flag Category End Start Type
ID                          
0      Animal  13    10  Cat

我的问题是,如何限制Flag列中的因子/类,仅包括CategoryType,而无需手动删除列?换句话说:

Flag Category Type
ID                          
0    Animal   Cat

我问的原因是因为我正在处理的数据集已接近~1000个键值对,因此手动删除重新整形的列绝对不是一个有吸引力的选项。

1 个答案:

答案 0 :(得分:1)

您可以使用isin进行过滤,以便只获得您感兴趣的值:

In [142]:

categories = ['Category', 'Type']
df2 = df1[df1['Flag'].isin(categories)].pivot(index = 'ID', columns = 'Flag', values = 'Value')
df2
Out[142]:
Flag Category Type
ID                
0      Animal  Cat