想出一个简单的例子有点困难,但我希望这是有道理的:我有一个循环可以生成一个变量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
我希望这是有道理的!
答案 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