Python 如何根据逻辑条件提取列值

Python 如何根据逻辑条件提取列值,python,pandas,numpy,Python,Pandas,Numpy,我有这样一个数据帧: TotalCost Year Type $100 2005 Honda $200 2006 Toyota $300 2007 Honda $100 2005 Mazda $400 2006 Honda $300 2007 Honda 我想创建一个新的专栏来分析未来几年的总成本价值。例如,在第一行中,代码将显示一个2005Honda。然后,它将在数据框的其余部分搜索2006Honda,并将2006Honda总成本作

我有这样一个数据帧:

TotalCost Year Type
$100      2005 Honda
$200      2006 Toyota
$300      2007 Honda
$100      2005 Mazda
$400      2006 Honda
$300      2007 Honda
我想创建一个新的专栏来分析未来几年的总成本价值。例如,在第一行中,代码将显示一个
2005
Honda
。然后,它将在数据框的其余部分搜索
2006
Honda
,并将
2006
Honda
总成本作为一个名为
NextYearCost
的新列返回到找到
2005
Honda
的同一行

接下来,代码将转到数据帧的第二行。它将看到这是一辆
2006
Toyota
。然后,代码将在数据框中搜索
2007
Toyota
。但是,由于没有
2007
Toyota
,数据框将在
NextYearCost
列中返回
NA
。代码将为数据帧中的每一行执行此操作

具有新列的所需数据帧,
NextYearCost

TotalCost Year Type    NextYearCost
$100      2005 Honda   $200
$200      2006 Toyota  NA
$300      2007 Honda   NA
$100      2005 Mazda   $400
$400      2006 Mazda   NA
$300      2007 Honda   NA
也许是这样的:

df.loc[(df['column_name'] == some_value) & df['other_column'].isin(some_values)]

谢谢

这不是最优雅的解决方案,但在您的类别和年份+1上进行合并是可行的。(也可能需要检查重复项,例如我使用了本田2007的两个条目的原始数据,因此合并添加了重复的数据行)

然后,如果需要,可以删除一些列并清理结果表:

df.drop(['Year_y', 'next_year_y', 'next_year_x'], inplace=True, axis=1)
df.rename(columns={'TotalCost_x':'TotalCost', 'Year_x': 'Year', 'TotalCost_y': 'NextYearCost'}, inplace=True)
df
Out: 
   TotalCost    Type  Year  NextYearCost
0        100   Honda  2005         400.0
1        200  Toyota  2006           NaN
2        300   Honda  2007           NaN
3        100   Mazda  2005           NaN
4        400   Honda  2006         300.0
5        400   Honda  2006         300.0
6        300   Honda  2007           NaN

这很有效。我使用的实际数据帧在数据帧中有更多的列,所以我用
df=pd.merge(df[['next_year',Type',TotalCost']],df,how='left',left_on=['next_year',Type'],right_on=['year',Type'])过滤其中一个数据帧。
df.drop(['Year_y', 'next_year_y', 'next_year_x'], inplace=True, axis=1)
df.rename(columns={'TotalCost_x':'TotalCost', 'Year_x': 'Year', 'TotalCost_y': 'NextYearCost'}, inplace=True)
df
Out: 
   TotalCost    Type  Year  NextYearCost
0        100   Honda  2005         400.0
1        200  Toyota  2006           NaN
2        300   Honda  2007           NaN
3        100   Mazda  2005           NaN
4        400   Honda  2006         300.0
5        400   Honda  2006         300.0
6        300   Honda  2007           NaN