我有一个包含大量日期的庞大数据框。我想将一个具有多个参数的函数应用于这些列的集合,以便在此数据帧中创建一个新的。
我的功能如下(它可以正常工作):
def func(*args):
count=0
for i in args:
if i=="Cool":
count+=1
return count
我在数据框中创建了一个新列,将此函数应用于一组列:
dates=["2000","2001","2002","2003","2004","2005","2006","2007","2009",]
df["new_Column"]=df.apply(lambda row : func(row[date] for date in dates), axis = 1)
但是,执行后我的new_Column始终等于零。问题来自最后一行肯定。有什么想法吗?
答案 0 :(得分:0)
这是因为您将生成器对象作为func
的唯一参数传递。由于生成器对象不是'Cool'
,因此您获得0
。
其他人注意到你的问题并不完整。但据我所知,你有数据框看起来像这样
import pandas as pd
df = pd.DataFrame({'2000': ['Cool', 'yay', 'nope'], '2001': ['ugly', 'cool', 'nice']})
因此,您可以重写func
def func(lst):
count=0
for i in lst:
if i=="Cool":
count+=1
return count
使用list
构造函数
df["new_Column"]=df.apply(lambda row : func(list(row[date] for date in ['2000', '2001'])), axis = 1)
并收到
2000 2001 new_Column
0 Cool ugly 1
1 yay cool 0
2 nope nice 0
如果是这种情况,那就是纯熊猫解决方案
df['new_Column2']=df[df.isin(['Cool'])].count(axis=1)