我有一个Pandas DataFrame -
>>> import numpy as np >>> import pandas as pd >>> data = pd.DataFrame(np.random.randint(low=0, high=2,size=(5,3)), ... columns=['A', 'B', 'C']) >>> data A B C 0 0 1 0 1 1 0 1 2 1 0 1 3 0 1 1 4 1 1 0
现在我用它来获取仅A列的行数
>>> data.ix[:, 'A'].value_counts() 1 3 0 2 dtype: int64
获得A列和B列的行数最有效的方法是什么,例如以下输出 -
0 0 0 0 1 2 1 0 2 1 1 1
然后最后我怎么能把它转换成一个numpy数组,如 -
array([[0, 2], [2, 1]])
请给出一个与之一致的解决方案
>>>> data = pd.DataFrame(np.random.randint(low=0, high=2,size=(5,2)), ... columns=['A', 'B'])
Andy Hayden.. 10
您可以使用groupby 大小然后取消堆栈:
In [11]: data.groupby(["A","B"]).size() Out[11]: A B 0 1 2 1 0 2 1 1 dtype: int64 In [12]: data.groupby(["A","B"]).size().unstack("B") Out[12]: B 0 1 A 0 NaN 2 1 2 1 In [13]: data.groupby(["A","B"]).size().unstack("B").fillna(0) Out[13]: B 0 1 A 0 0 2 1 2 1
但是,无论何时执行groupby后跟一个unstack,你都应该考虑:pivot_table:
In [21]: data.pivot_table(index="A", columns="B", aggfunc="count", fill_value=0) Out[21]: C B 0 1 A 0 0 2 1 2 1
这将是最有效的解决方案,也是最直接的解决方案.
您可以使用groupby 大小然后取消堆栈:
In [11]: data.groupby(["A","B"]).size() Out[11]: A B 0 1 2 1 0 2 1 1 dtype: int64 In [12]: data.groupby(["A","B"]).size().unstack("B") Out[12]: B 0 1 A 0 NaN 2 1 2 1 In [13]: data.groupby(["A","B"]).size().unstack("B").fillna(0) Out[13]: B 0 1 A 0 0 2 1 2 1
但是,无论何时执行groupby后跟一个unstack,你都应该考虑:pivot_table:
In [21]: data.pivot_table(index="A", columns="B", aggfunc="count", fill_value=0) Out[21]: C B 0 1 A 0 0 2 1 2 1
这将是最有效的解决方案,也是最直接的解决方案.