如何遍历行并将值分配给新列

时间:2019-07-26 04:35:01

标签: python dataframe for-loop if-statement

我有一个超过75,000行的数据框,大约有13个预先存在的列。现在,我想基于if语句创建一个新列,例如:

如果某列的每一行与下一行具有相同的值,则该行在新列中的值为0或1。

if语句检查两个相等性(列为tags_listgateway_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:所有列的行数均相同

2 个答案:

答案 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])

如果需要翻转零和一,只需将!=更改为==