我正在尝试根据不同列的值创建一个新列,以将不同列中的值标记为两个存储桶。
因此,如果日期为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
其中标签将是新列
感谢您的光临
答案 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