将数据框单元格值与序列进行比较,然后求和

时间:2018-10-04 03:12:20

标签: python pandas dataframe

假设我有Pandas DataFrame,如图所示(df_All);

  Category Count
0  Apple     1
1   Pen      3
2  Orange    4
3   Book     1

和2个这样的Pandas系列(df_Fruit,df_Object);

  Fruit                                Object
0 Apple                              0 Pen
1 Orange                             1 Book

我想将DataFrame与Series进行比较,这样我就可以得到这张表的总和;

  Category Count
0 Fruit      5
1 Object     4

我想尝试的是使用循环功能并进行如下比较;

def getCategoryCount(row):
    food_count = 0

    for value in df_Fruit['Fruit']:
        if row['Category'] == value:
            food_count = row['Count']

    return food_count

df = df_All.apply(getCategoryCount, axis=1)

但是df这样填充;

0 1
1 0
2 4
3 0

我可以使用df.sum()来获取值,但一次只能获取Series值,因为如果我在getCategoryCount中放入另一个for循环,它将求和整个df。

如果可能,我希望getCategoryCount作为Pandas DataFrame返回

2 个答案:

答案 0 :(得分:1)

使用map来获取groupby

s=pd.concat([df1,df2]).stack()

df.groupby(df.Category.map(dict(zip(s,s.index.get_level_values(1))))).Count.sum()
Out[232]: 
Category
Fruit     5
Object    4
Name: Count, dtype: int64

答案 1 :(得分:0)

我首先将类别分为以下两个列表:

fruits = list(fruits)
objects = list(objects)

然后,我将对df_all进行切片,并对Count列求和,得出df的定义如下:

df = pd.DataFrame([['Fruits', df_all[df_all.Category.isin(fruits)]['Count'].sum()], ['Objects', df_all[df_all.Category.isin(objects)]['Count'].sum()]], columns = ['Category', 'Count'])

当我打印df时,结果是:

>>> df
    Category    Count
0   Objects      3
1   Fruits       5