将pd.value_counts()和已定义的变量附加到一行数据帧

时间:2018-05-14 02:23:01

标签: python pandas dataframe

想出一个简单的例子有点困难,但我希望这是有道理的:我有一个循环可以生成一个变量name和一个像这样的数据框

name = 'store1'
exampledf = pd.DataFrame({'animal': ['bird', 'bird', 'dog', 'cat', 'cat', 'cat']})

我可以使用exampledf['animal'].value_counts()来获取:

cat     3
bird    2
dog     1

所需的输出是将name和值计数添加到新的df中,如下所示:

store    cat    bird    dog
store1   3      2       1

然后在下一个循环中说我有

name = 'store2'
exampledf = pd.DataFrame({'animal': ['cat', 'cat', 'bird', 'cat', 'cat', 'bird']})

我希望添加以获取:

store    cat    bird    dog
store1   3      2       1
store2   4      2       0

我希望这是有道理的!

1 个答案:

答案 0 :(得分:3)

让我们尝试对此进行矢量化。连接您的DataFrame,调用str.get_dummies,然后在索引中求和。

df_list = [exampledf1, exampledf2]
names = [name1, name2]

(pd.concat(df_list, axis=0, keys=names)
   .animal
   .str.get_dummies()
   .sum(level=0)
)

        bird  cat  dog
store1     2    3    1
store2     2    4    0

如果您的数据不是df_list&的格式。 names,我强烈建议找到一种方法来实现它。

另一种方法是每循环迭代调用df.append。我认为这是缓慢而丑陋的:

df = pd.DataFrame()

for d, n in zip(df_list, names):
    df = df.append(
        d.animal.value_counts().to_frame().T.set_index([[n]])
    )

df
        bird  cat  dog
store1     2    3  1.0
store2     2    4  NaN