Yas*_*eth 9 python numpy pandas
我有一个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
Run Code Online (Sandbox Code Playgroud)
现在我用它来获取仅A列的行数
>>> data.ix[:, 'A'].value_counts()
1 3
0 2
dtype: int64
Run Code Online (Sandbox Code Playgroud)
获得A列和B列的行数最有效的方法是什么,例如以下输出 -
0 0 0
0 1 2
1 0 2
1 1 1
Run Code Online (Sandbox Code Playgroud)
然后最后我怎么能把它转换成一个numpy数组,如 -
array([[0, 2],
[2, 1]])
Run Code Online (Sandbox Code Playgroud)
请给出一个与之一致的解决方案
>>>> data = pd.DataFrame(np.random.randint(low=0, high=2,size=(5,2)),
... columns=['A', 'B'])
Run Code Online (Sandbox Code Playgroud)
And*_*den 10
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
Run Code Online (Sandbox Code Playgroud)
但是,无论何时执行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
Run Code Online (Sandbox Code Playgroud)
这将是最有效的解决方案,也是最直接的解决方案.
| 归档时间: |
|
| 查看次数: |
7828 次 |
| 最近记录: |