从 pandas 系列中创建三个数组
Create three arrays from pandas series
例如,我有 pandas 个这样的数据系列:
df = pd.DataFrame({'A': ['foo', 'bar', 'ololo'] * 4,
'B': np.random.randn(12),
'C': np.random.randint(0, 2, 12)})
ga = df.groupby(['A'])['C'].value_counts()
print ga
A
bar 1 3
0 1
foo 0 3
1 1
ololo 0 4
我想创建三个数组,如下所示:
第一个数组
bar, foo, ololo
第二个数组(“1”的个数)
2 3 1
第三个数组('0'的个数)
2 1 3
最简单的方法是什么?
开始于:
import pandas as pd
import numpy as np
df = pd.DataFrame({
'A': ['foo', 'bar', 'ololo'] * 4,
'B': np.random.randn(12),
'C': np.random.randint(0, 2, 12)
})
counts = df.groupby('A')['C'].value_counts()
给出(counts
):
A
bar 1 4
foo 1 4
ololo 0 3
1 1
dtype: int64
所以,实际上我们想要取消堆叠和转置,以便 0/1 是索引,我们这样做:
reshaped = counts.unstack().T.reindex([0, 1]).fillna(0)
DSM 指出可以通过执行以下操作来避免 .reindex
:
reshaped = counts.unstack().T.loc[[0, 1]].fillna(0)
给出:
A bar foo ololo
0 0 0 3
1 4 4 1
我们强制 .reindex
以确保它始终包含 0/1(在随机性意味着 0/1 没有出现的情况下)并强制所有列值都为 0(.fillna(0)
) 在这种情况下。然后,您可以通过执行以下操作来获取数组:
arrays = reshaped.columns.values, reshaped.loc[1].values, reshaped.loc[0].values
这给你:
(array(['bar', 'foo', 'ololo'], dtype=object),
array([ 4., 4., 1.]),
array([ 0., 0., 3.]))
例如,我有 pandas 个这样的数据系列:
df = pd.DataFrame({'A': ['foo', 'bar', 'ololo'] * 4,
'B': np.random.randn(12),
'C': np.random.randint(0, 2, 12)})
ga = df.groupby(['A'])['C'].value_counts()
print ga
A
bar 1 3
0 1
foo 0 3
1 1
ololo 0 4
我想创建三个数组,如下所示:
第一个数组
bar, foo, ololo
第二个数组(“1”的个数)
2 3 1
第三个数组('0'的个数)
2 1 3
最简单的方法是什么?
开始于:
import pandas as pd
import numpy as np
df = pd.DataFrame({
'A': ['foo', 'bar', 'ololo'] * 4,
'B': np.random.randn(12),
'C': np.random.randint(0, 2, 12)
})
counts = df.groupby('A')['C'].value_counts()
给出(counts
):
A
bar 1 4
foo 1 4
ololo 0 3
1 1
dtype: int64
所以,实际上我们想要取消堆叠和转置,以便 0/1 是索引,我们这样做:
reshaped = counts.unstack().T.reindex([0, 1]).fillna(0)
DSM 指出可以通过执行以下操作来避免 .reindex
:
reshaped = counts.unstack().T.loc[[0, 1]].fillna(0)
给出:
A bar foo ololo
0 0 0 3
1 4 4 1
我们强制 .reindex
以确保它始终包含 0/1(在随机性意味着 0/1 没有出现的情况下)并强制所有列值都为 0(.fillna(0)
) 在这种情况下。然后,您可以通过执行以下操作来获取数组:
arrays = reshaped.columns.values, reshaped.loc[1].values, reshaped.loc[0].values
这给你:
(array(['bar', 'foo', 'ololo'], dtype=object),
array([ 4., 4., 1.]),
array([ 0., 0., 3.]))