Python 熊猫在单列中迭代多行。。。。如何避免40+;elif语句?
我有一个CSV文件,有78列,大约400000列。下面是一个简化的例子: ''' ''' 尝试为列使用键时,请删除loc键弃用的内容: ''' ''' 我需要生成一个输出,在旋转“Data1”-“Data4”时,为“Location”的每个值重复X、Y、Z 看来熔化功能对这有好处 ''' ''' 最终得到数学转换之前我需要的数据格式。 ''' ''' 现在我需要做这个问题所涉及的实际数学运算 如何从Data1-Data48中获得48种类型的变量。我需要修改Z场,不管数据场是什么(我正在为一些地质建模/可视化制作点云)。我能想到的唯一方法是使用48个if语句,并在循环中计算每个语句,然后将适当的偏移量添加到Z列中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场,不管数据场是什么(我正在为一些地质
现在,这似乎效率很低,必须有另一种方法,我试图用谷歌搜索我的方法来解决这个问题,但我真的一点运气都没有。让我们假设您有一个字典,将
变量
字段映射到偏移量:
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