遍历 pandas 数据框中的两列
Iterating through two columns in a pandas dataframe
我正在尝试遍历数据框中的两列,如果客户一直续签合同,我会尝试通过查找今年的合同 (data.Year_Season == 2014-2015
) 来为统计模型分析创建一个虚拟列,并且客户不止一次续订 (data.Rank_ouput > 1
)。请看下面的代码:
def make_always_renewed_column(data):
for i, row in data.iterrows():
if row.Year_Season and row.Rank_output > 1:
return 1
else:
return 0
data['alwaysRenewed'] = make_always_renewed_column(data)
但是当我查看返回的内容时:
data.groupby(['alwaysRenewed'])[['lead_id']].count()
新列中的所有行都返回了 0。
我在满足 .iloc
条件的一行上尝试了这个,它返回了 True
。
有什么想法吗?
更新
刚试了没用:
def make_always_renewed_column(data):
for row in data.itertuples():
if row[8] == '2014-2015' and row[10] > 1:
return 1
else:
return 0
进行这些类型的测试无需遍历各个行。在 pandas 列上的 +
、-
、==
等操作是 向量化,即它们会自动应用于每个元素专栏。您的测试应该如下所示:
data['alwaysRenewed'] = (data['Year_Season'] == '2014-2015') & (data['Rank_output'] > 1)
这将创建一个布尔列,即 True
/False
值的列。出于总和、均值等目的,这些将像 0/1 一样,但您可以使用以下方法显式转换为 0/1:
data['alwaysRenewed'] = data['alwaysRenewed'].astype(int)
我正在尝试遍历数据框中的两列,如果客户一直续签合同,我会尝试通过查找今年的合同 (data.Year_Season == 2014-2015
) 来为统计模型分析创建一个虚拟列,并且客户不止一次续订 (data.Rank_ouput > 1
)。请看下面的代码:
def make_always_renewed_column(data):
for i, row in data.iterrows():
if row.Year_Season and row.Rank_output > 1:
return 1
else:
return 0
data['alwaysRenewed'] = make_always_renewed_column(data)
但是当我查看返回的内容时:
data.groupby(['alwaysRenewed'])[['lead_id']].count()
新列中的所有行都返回了 0。
我在满足 .iloc
条件的一行上尝试了这个,它返回了 True
。
有什么想法吗?
更新
刚试了没用:
def make_always_renewed_column(data):
for row in data.itertuples():
if row[8] == '2014-2015' and row[10] > 1:
return 1
else:
return 0
进行这些类型的测试无需遍历各个行。在 pandas 列上的 +
、-
、==
等操作是 向量化,即它们会自动应用于每个元素专栏。您的测试应该如下所示:
data['alwaysRenewed'] = (data['Year_Season'] == '2014-2015') & (data['Rank_output'] > 1)
这将创建一个布尔列,即 True
/False
值的列。出于总和、均值等目的,这些将像 0/1 一样,但您可以使用以下方法显式转换为 0/1:
data['alwaysRenewed'] = data['alwaysRenewed'].astype(int)