我有一个 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'])
您可以使用分组size http://pandas.pydata.org/pandas-docs/stable/generated/pandas.core.groupby.GroupBy.size.html进而unstack http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.unstack.html:
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
However每当你执行 groupby 和 unstack 操作时,你应该思考:数据透视表 http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.pivot_table.html:
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
这将是最有效也是最直接的解决方案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)