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

问题描述 投票:0回答:2

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

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

我的解决方案:我创建了一个新变量=每个城市名称的第一个字母,以及字典“A”:1,“B”:2,...“Z”:26。然后我创建了另一个列,其中包含与每个首字母相关联的值。目标是从行(n + 1)中减去行n并计算结果=> 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。

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

python python-3.x pandas
2个回答
1
投票

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

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

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

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


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)

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

© www.soinside.com 2019 - 2024. All rights reserved.