Pandas将多列计数保存在单个数据框中

3

我现在有一个包含3列的数据帧,看起来像这样:

Model          IsJapanese   IsGerman   
BenzC             0            1
BensGla           0            1
HondaAccord       1            0
HondaOdyssey      1            0
ToyotaCamry       1            0

我想创建一个新的数据帧,并在同一数据帧中拥有TotalJapanese和TotalGerman作为两列。
我可以通过创建2个不同的数据帧来实现这一点。但是我想知道如何在单个数据帧中获取这两个计数。
请给出建议,谢谢!
编辑并向此添加另一个类似的数据帧[对不起,不确定是否被允许-但正在尝试]
第二个数据集-我尝试保存多个计数到单个数据帧中,基于数据的重复。
以下是我的样本数据集。
Store        Address           IsLA             IsGA
Albertsons   Cross St           1                 0
Safeway      LeoSt              0                 1
Albertsons   Main St            0                 1
RiteAid      Culver St          1                 0

我的目的是准备一个包含每个商店多次计数的新数据集。

结果应该像这样

Store      TotalStores TotalLA TotalGA 
Alberstons 2           1        1 
Safeway    1           0        1 
RiteAid    1           1        0

能在单个数据框中实现这些吗?

谢谢!


df.groupby('Store').sum().assign(Total=lambda df: df.sum(axis='columns')) - Paul H
1个回答

2

一种方法是将日本车和德国车的总和存储起来,并手动创建一个数据框:

j , g =sum(df['IsJapanese']),sum(df['IsGerman']) 

total_df = pd.DataFrame({'TotalJapanese':j,
                         'TotalGerman':g},index=['Totals'])

print(total_df)
 
        TotalJapanese  TotalGerman
Totals              3            2

另一种方法是转置(T)您的数据框,sum(axis=1),然后再次转置:
>>> total_df_v2 = pd.DataFrame(df.set_index('Model').T.sum(axis=1)).T

print(total_df_v2)

   IsJapanese  IsGerman
           3         2

为了回答你的第二个问题,你可以在“Store”列上使用DataFrameGroupBy.agg函数,使用参数count表示Address,并使用sum参数表示其他两列。然后,如果需要,你可以使用rename()函数对列进行重命名:
resulting_df  = df.groupby('Store').agg({'Address':'count',
                         'IsLA':'sum',
                         'IsGA':'sum'}).\
    rename({'Address':'TotalStores',
             'IsLA':'TotalLA',
             'IsGA':'TotalGA'},axis=1)

输出:

            TotalStores  IsLA  IsGA
Store                              
Albertsons            2     1     1
RiteAid               1     1     0
Safeway               1     0     1

1
非常感谢您的建议!让我试试这些。 - Mmenon
1
嗨,我也会为你解答第二个问题,但这并不是一个好的做法。因为你添加了一个额外的问题,这导致你先接受了答案然后又撤销了,这在 Stack Overflow 中并不被推崇。 - sophocles
“Alebrstones”在行中是应该以不同的方式书写还是打错了? - sophocles
1
非常抱歉 - 我只是这样做是因为我认为可能不会有问题需要回答。 - Mmenon
1
非常感谢!是的,看到结果了。快速问题 - 我该如何将它们保存到数据框中以便导出? - Mmenon
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接