以下是我拥有的数据集
col1 | col2 | col3
E | 1.2| 1.1
E | 2.5 | 1.5
E | 3.4 | 7.2
T | 1.0 |5.4
T | 2.1 | 1.2
我想要的是基于上面cols的第四个col,所以如果col1 =='E',那么col4将获取col2值,如果col1 =='T',则col4将获取col3值。
我已经尝试过循环和np.where但是没有任何工作,我经常只获得col2的值。如果col1是T,这是错误的。
这是我尝试的最后一段代码之一,但失败了:
col4= []
for i in range(0,len(data_set['col1'])):
try:
subdf = data_set['col1'].loc[(data_set['col1']=='E')]
curve = data_set['col2']
print(curve)
except:
subdf = data_set.loc[(data_set['col1']=='T')]
curve =data_set['col3']
print(curve)
答案 0 :(得分:0)
您正在寻找类似的内容:
#!/usr/bin/env python3
data = [["E", 1.2, 1.1],
["E", 2.5, 1.5],
["E", 3.4, 7.2],
["T", 1.0, 5.4],
["T", 2.1, 1.2]]
def transform(data):
result = []
for line in data:
tmp = line[:]
value = line[1] if line[0] == "E" else line[2]
tmp.append(value)
result.append(tmp)
return result
print(transform(data))
首先,请看一下循环如何在Python中运行:
虽然技术上for i in range(0,len(data_set['col1']))
似乎是正确的,因为在典型的基于C
的语言中这是循环的基本,在python中iterator
模式用于循环。通常是for foo in foocollection
。
try
,except
不是,在这种情况下你想要的是什么。这些是用于处理例外行为的关键字。在这里,您可以毫无例外地期待一些事情。
在我的例子中,我做了一些假设:
1)数据是行列表(列表)
2)您不想修改原件。因此,副本即时生成:python允许使用[:]
表示法来执行此操作
3)只有" E"" T" s,所以基本if
else
有效
代码应该产生想要的结果,并且是第一个进入Python的帮助;)
玩得开心!