私はパンダの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'])
あなたは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の後にアンスタックを実行する場合は、次のように考える必要があります。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
これは最も効率的なソリューションであると同時に、最も直接的です。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加