我有一个超过75,000行的数据框,大约有13个预先存在的列。现在,我想基于if
语句创建一个新列,例如:
如果某列的每一行与下一行具有相同的值,则该行在新列中的值为0或1。
if
语句检查两个相等性(列为tags_list
和gateway_id
)。
下面的代码段是我尝试过的
for i in range(1,len(df_sort['date'])-1):
if (df_sort.iloc[i]['tags_list'] == df_sort.iloc[i+1]['tags_list']) & (df_sort.iloc[i]['gateway_id'] == df_sort[i+1]['gateway_id']):
df_sort.iloc[i]['Transit']=0
else:
df_sort.iloc[i]['Transit']=1
在这种情况下获取keyerror :2
PS:所有列的行数均相同
答案 0 :(得分:0)
if (df_sort.iloc[i]['tags_list'] == df_sort.iloc[i+1]['tags_list']) &
(df_sort.iloc[i]['gateway_id'] == df_sort.iloc[i+1]['gateway_id']):
df_sort[i+1]['gateway_id']
应该是df_sort.iloc[i+1]['gateway_id']
此外,您确定要从1而不是从0迭代吗?
答案 1 :(得分:0)
有numpy
种机制,即numpy.diff
。考虑一个已经填充了一些通用列“ x”的数据框。
In [48]: df['x'].values
Out[48]: array([0, 0, 0, 0, 1, 1, 1, 2, 2, 3])
In [49]: df['x_diff'] = (np.diff(df['x'], prepend=0) != 0) * 1
In [50]: df['x_diff'].values
Out[50]: array([0, 0, 0, 0, 1, 0, 0, 1, 0, 1])
如果需要翻转零和一,只需将!=
更改为==
。