使用不同的列值创建带有标签的新列

时间:2019-07-10 20:54:21

标签: python python-3.x pandas data-science

我正在尝试根据不同列的值创建一个新列,以将不同列中的值标记为两个存储桶。

因此,如果日期为4 / 24、4 / 26,我希望标签为1,而4/25标签为2,

预期的df如下:

date | label 
4/24     1
4/25     2
4/26     1
4/24     1
4/26     1

其中标签将是新列

感谢您的光临

4 个答案:

答案 0 :(得分:1)

我认为这就是您想要的:

import pandas as pd
dataframe = pd.DataFrame()
dataframe["date"] = ['4/24', '4/25', '4/26', '4/24', '4/26']

dictionary = {'4/24' : '1', '4/25' : '2', '4/26':'1' }
dataframe["label"] = dataframe["date"].map(dictionary)
dataframe

创建字典,以便我们可以将每个标签及其日期映射。您可以相应地更改字典。

输出:

date    label
0   4/24    1
1   4/25    2
2   4/26    1
3   4/24    1
4   4/26    1

希望这会有所帮助!

答案 1 :(得分:0)

假设您具有分类功能

def classify(date):
    # returns a label for date

然后您可以实现所需的内容:

df['label'] = pd.Series(classify(df['date'].values), index=df.index)

答案 2 :(得分:0)

嗯,因此,如果您要打印所述列,则可以执行以下操作:

print(date | label)
dates = ['4/24', '4/25', '4/26', '4/24', '4/26']
labels = ['1','2','1','2','1']
for i in range(len(dates)):
    print(dates[i]+'     '+labels[i])

我猜这就是你想要的

考虑到您将所有标签和日期都放在两个按索引排序的列表中。

或者您可以这样做:

datesToBePrinted = zip(dates, labels)
for i in datesToBePrinted:
    print(i)

答案 3 :(得分:0)

在这种非常特殊的情况下,您只需要检查最后一个字符是否为5,就可以拥有一个非常好的矢量化功能:

df['label'] = df['date'].str[-1].eq('5') + 1 

输出:

   date  label
0  4/24      1
1  4/25      2
2  4/26      1
3  4/24      1
4  4/26      1