基于另一个变量/列的两行在数据框中生成新的变量/列

时间:2017-12-19 11:04:17

标签: python python-3.x pandas

背景:我正在使用统一犯罪报告数据,按城市(地点)编制索引。我正在尝试合并/连接2006-2016年

问题:并非所有.csv都在城市名称前面有一个州列,每个文件中都有不同数量的城市。由于城市名称列中存在重复项,因此无法使用第二个键进行合并(对我而言)。

我的解决方案:我创建了一个新变量=每个城市名称的第一个字母和一个字典“A”:1,“B”:2,...“Z”:26。然后我创建了另一个列,其中包含与每个首字母相关联的值。目标是从行(n + 1)中减去行n并评估result => 0,或评估不等式行(n + 1)=> row(n)

我花了大部分时间尝试在列表中执行此操作,例如:

    state = []
    statenum = 1
    for n in firstletter:
        if n+1 => n:
            state.append(statenum)
        else:
            statenum = statenum + 1
            state.append(statenum)

但是,对于我的生活,我无法弄清楚如何在列表中调用n + 1对象,而不是简单地将n加1到n值。

我刚刚尝试在数据框中尝试这样做,但我无法让它工作。我很乐意为两者提供解决方案;它并不需要特别有效。

2 个答案:

答案 0 :(得分:1)

  

但是,对于我的生活,我无法弄清楚如何在列表中调用n + 1对象,而不是简单地将n加1到n值。

如果你想要下一个迭代对象,你可以这样做:

for index, n in enumerate(firstletter):
    n # it is your current object
    firstletter[index + 1] # it is your next object

但要小心,因为当你点击最后一个对象时你不想搜索下一个迭代,因为你会引发 IndexError

答案 1 :(得分:0)

谢谢你,IMCoins& COLDSPEED。我得到了它的工作:

    testn = []
    state = 1
    for index, n in enumerate(ln[:-1]):
    c1 = n
    c2 = ln[index + 1] 
    if c2 >= c1:
        testn.append(state)
    else:
        state = state + 1
        testn.append(state)

我确信它是效率最低的方式,但它适用于我=)