我正在阅读Wes McKinney在python中的数据分析
分组信息可能以阵列以外的形式存在。让我们考虑另一个 示例DataFrame:
In [38]: people = DataFrame(np.random.randn(5, 5),
....: columns=['a', 'b', 'c', 'd', 'e'],
....: index=['Joe', 'Steve', 'Wes', 'Jim', 'Travis'])
In [39]: people.ix[2:3, ['b', 'c']] = np.nan # Add a few NA values
现在,假设我有一个列的对应关系,并希望总结 按组分组:
In [41]: mapping = {'a': 'red', 'b': 'red', 'c': 'blue',
....: 'd': 'blue', 'e': 'red', 'f' : 'orange'}
现在,您可以轻松地从此dict构造一个数组以传递给groupby,但相反 我们可以通过这个词:
In [42]: by_column = people.groupby(mapping, axis=1)
我的问题是作者的意思是"从这个dict轻松构造一个数组以传递给groupby"。
另一个问题是我们如何从dict构造列表并传递给数组并获得与下面相同的结果
by_column = people.groupby(mapping, axis=1)
请解释
答案 0 :(得分:1)
dict mapping
用于将people
的列名映射到用于分组的颜色。作为将此地图传递给groupby
的替代方法,我们可以使用
people.columns = [mapping[col] for col in people.columns]
使用列表理解,或
people.columns = people.columns.to_series().map(mapping)
用pandas方法获得类似的效果
除此之外 - 对于pandas map
对象,Index
似乎还不能使用字典,从0.20.2开始,如果走这条路线则需要to_series()
。
然后groupby
列
by_column2 = people.groupby(people.columns, axis=1)
给出相同的结果。例如:
In [11]: by_column.sum()
Out[11]:
blue red
Joe 0.548220 1.744519
Steve -2.056899 0.907479
Wes 0.093676 -2.145836
Jim 1.782462 0.715873
Travis -0.066277 -2.286108
In [12]: by_column2.sum()
Out[12]:
blue red
Joe 0.548220 1.744519
Steve -2.056899 0.907479
Wes 0.093676 -2.145836
Jim 1.782462 0.715873
Travis -0.066277 -2.286108
我认为这应该涵盖问题2,但请告诉我,如果这不是你想要采取的目标。我想问题1,作者只是意味着这一点,上面的内容很容易做到,在所演示的方法之上采取了额外的一条线。