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