Python 熊猫在单列中迭代多行。。。。如何避免40+;elif语句?

Python 熊猫在单列中迭代多行。。。。如何避免40+;elif语句?,python,arrays,pandas,list,Python,Arrays,Pandas,List,我有一个CSV文件,有78列,大约400000列。下面是一个简化的例子: ''' ''' 尝试为列使用键时,请删除loc键弃用的内容: ''' ''' 我需要生成一个输出,在旋转“Data1”-“Data4”时,为“Location”的每个值重复X、Y、Z 看来熔化功能对这有好处 ''' ''' 最终得到数学转换之前我需要的数据格式。 ''' ''' 现在我需要做这个问题所涉及的实际数学运算 如何从Data1-Data48中获得48种类型的变量。我需要修改Z场,不管数据场是什么(我正在为一些地质

我有一个CSV文件,有78列,大约400000列。下面是一个简化的例子: '''

'''

尝试为列使用键时,请删除loc键弃用的内容: '''

'''

我需要生成一个输出,在旋转“Data1”-“Data4”时,为“Location”的每个值重复X、Y、Z

看来熔化功能对这有好处

'''

''' 最终得到数学转换之前我需要的数据格式。 '''

'''

现在我需要做这个问题所涉及的实际数学运算

如何从Data1-Data48中获得48种类型的变量。我需要修改Z场,不管数据场是什么(我正在为一些地质建模/可视化制作点云)。我能想到的唯一方法是使用48个if语句,并在循环中计算每个语句,然后将适当的偏移量添加到Z列中


现在,这似乎效率很低,必须有另一种方法,我试图用谷歌搜索我的方法来解决这个问题,但我真的一点运气都没有。

让我们假设您有一个字典,将
变量
字段映射到偏移量:

delta = {'Data1': 3, 'Data2': 5, 'Data3': 7, 'Data4': 9, 'Location': 0}
我们可以从中构建一个辅助数据帧:

aux = pd.Series(delta, name='offset').to_frame().rename_axis('variable').reset_index()
它在这里给出:

   variable  offset
0     Data1       3
1     Data2       5
2     Data3       7
3     Data4       9
4  Location       0
现在,我们可以简单地将相关偏移量以矢量化方式添加到
Z
字段:

df2['Z'] += df2.merge(aux, how='left', on='variable')['offset']
要获得:

    X  Y  Z  variable  Measurements
0   1  0  0  Location             1
1   2  0  0  Location             2
2   3  1  0  Location             3
3   4  1  0  Location             4
4   1  0  3     Data1           123
5   2  0  3     Data1           645
6   3  1  3     Data1           324
7   4  1  3     Data1           876
8   1  0  5     Data2           733
9   2  0  5     Data2           347
10  3  1  5     Data2           547
11  4  1  5     Data2           764
12  1  0  7     Data3           245
13  2  0  7     Data3           846
14  3  1  7     Data3           435
15  4  1  7     Data3            99
16  1  0  9     Data4           748
17  2  0  9     Data4           664
18  3  1  9     Data4           222
19  4  1  9     Data4           810

使用dict并使用键查找值。
aux = pd.Series(delta, name='offset').to_frame().rename_axis('variable').reset_index()
   variable  offset
0     Data1       3
1     Data2       5
2     Data3       7
3     Data4       9
4  Location       0
df2['Z'] += df2.merge(aux, how='left', on='variable')['offset']
    X  Y  Z  variable  Measurements
0   1  0  0  Location             1
1   2  0  0  Location             2
2   3  1  0  Location             3
3   4  1  0  Location             4
4   1  0  3     Data1           123
5   2  0  3     Data1           645
6   3  1  3     Data1           324
7   4  1  3     Data1           876
8   1  0  5     Data2           733
9   2  0  5     Data2           347
10  3  1  5     Data2           547
11  4  1  5     Data2           764
12  1  0  7     Data3           245
13  2  0  7     Data3           846
14  3  1  7     Data3           435
15  4  1  7     Data3            99
16  1  0  9     Data4           748
17  2  0  9     Data4           664
18  3  1  9     Data4           222
19  4  1  9     Data4           810