基于Python中的其他三个cols创建第四个col

时间:2017-12-30 21:45:19

标签: python python-3.x

以下是我拥有的数据集

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)

1 个答案:

答案 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

tryexcept不是,在这种情况下你想要的是什么。这些是用于处理例外行为的关键字。在这里,您可以毫无例外地期待一些事情。

在我的例子中,我做了一些假设:

1)数据是行列表(列表)

2)您不想修改原件。因此,副本即时生成:python允许使用[:]表示法来执行此操作

3)只有" E"" T" s,所以基本if else有效

代码应该产生想要的结果,并且是第一个进入Python的帮助;)

玩得开心!