名称属于相似类别的列的总和

时间:2019-04-02 12:59:26

标签: python-3.x pandas filter

Python的新功能-我有一个pandas数据框,其中包含100行和275列,其中包含邻域作为索引,而场所则作为列。列中的许多场所都是相似的,可以分为更广泛的类别。该表的值是每个邻居的场所的频率。我正在尝试通过将旧列的频率归类来创建一个具有旧列频率总和的新数据框。

df = pd.DataFrame({'Area': ['Area1', 'Area2', 'Area3'], 
                   'Pizza Place': [0.01, 0.02, 0.02],'Sandwich shop': [0.01, 0.02, 0.02],'Burger Joint': [0.01, 0.02, 0.02],'Area': ['Area1', 'Area2', 'Area3'], 
                   'Park': [0.01, 0.02, 0.02],'Elementary School': [0.01, 0.02, 0.02],'Playground': [0.01, 0.02, 0.02]})

我想创建2列将执行以下操作:

df['total_fast_food']=sum of frequencies for columns that contain the words:'Pizza','Sandwich','Burger' in their name
df['total_kids]=sum of frequencies for columns that contain the words:'Park','School','Play' in their name

到目前为止我尝试过的事情:

df.loc[df['Venue Category'].str.contains('Fast Food|Pizza Place|Burger Joint', case=False)] = 'FastFood'
df_new=df_old.filter(like='Fast',axis=1)
df_new['FastFood'] = df_new.sum(axis=1)

使用df.loc,我可以在现有df中创建新列,并删除用作参数的列,但在数据框中,新列的值现在都为0。

使用filter(like =)我得到名称中具有“ Fast”的所有列的总和,这很好,但是显然我不能将其用于其他参数,例如“ Joint,Pizza等”

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

在没有包含输入数据的MCVE的情况下,可以想到一个近似答案。虽然尚不清楚要在哪个轴上计数值。

此外,要注意类别,因此要计算类别。

import pandas as pd

venue = ["Fast Food", "Pizza Place", "Burger Joint", "Fast Food", "Pizza Place", "Burger Joint", "Burger Joint", "Fast Food", "Fast Food"]
df = pd.DataFrame({"Venue":venue})
df["Venue Category"] = pd.Categorical(df['Venue'])
print(df["Venue Category"].value_counts())