我正在尝试迭代数据框中的两列并为客户端总是续订合同创建一个用于statsmodel分析的虚拟列,通过查找今年的合同(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
答案 0 :(得分:2)
没有必要遍历各行来进行这些类型的测试。 pandas列上的 $("#grid").kendoGrid({
columns: [
{
command: [{ name: "edit" }, {
name: "Delete", imageClass: "k-icon k-i-close", click: function (e) {
e.preventDefault();
var dataItem = this.dataItem($(e.target).closest("tr"));
if (confirm('Do you really want to delete this record?')) {
var dataSource = $("#grid").data("kendoGrid").dataSource;
dataSource.remove(dataItem);
dataSource.sync();
}
}
}], title: " ", width: "200px"
}
]
});
,+
,-
等操作是矢量化,即它们会自动应用于列的每个元素。您的测试应该如下所示:
==
这将创建一个布尔列,即一列data['alwaysRenewed'] = (data['Year_Season'] == '2014-2015') & (data['Rank_output'] > 1)
/ True
值。对于总和,均值等目的,这些将表现为0/1,但您可以使用以下方式明确转换为0/1:
False