假设我有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返回
答案 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