我正在尝试基于两列的组合来创建唯一的代码。任何帮助都将非常有用。谢谢。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Globalization;
namespace ConsoleApplication166
{
class Program
{
static void Main(string[] args)
{
Context db = new Context();
string id = "abc";
var results = db.Conteudo
.Where(x => (x.nomeAl == id) && (x.Data_cont.Day == DateTime.Now.Day))
.OrderBy(x => x.Data_cont)
.Select(x => new { max_valor = x.max_valor, date = x.Data_cont.ToString("hh:mm") })
.ToList();
}
}
public class Context
{
public List<Conteudo> Conteudo { get; set; }
}
public class Conteudo
{
public string nomeAl { get; set; }
public DateTime Data_cont { get; set; }
public string max_valor { get; set; }
}
}
输入:
import pandas as pd
data = [['ajay','AL'],['ajay','AB'],['ajay','AL'],['Alex','Ac'],['Alex','Ay'],['Alex','Ac'],['Alex','Ac'],['Bob','Ay'],['Clarke','cv']]
df = pd.DataFrame(data,columns=['Name','Cat'],dtype=float)
输出:
Name Cat
0 ajay AL
1 ajay AB
2 ajay AL
3 Alex Ac
4 Alex Ay
5 Alex Ac
6 Alex Ac
7 Bob Ay
8 Clarke cv
谢谢。
答案 0 :(得分:1)
您可以像这样简单地用uuid创建一列:
import uuid
df['code'] = df.apply(lambda x: uuid.uuid1(), axis=1)
或者如果您想合并两列:
df['code'] = df.apply(lambda row: row.Name + row.Cat, axis=1)
答案 1 :(得分:1)
我希望我对您的问题理解正确,此脚本将创建列code
,其中前两个字符来自列'Name'
,然后基于'Cat'
列编号:
from itertools import count
from functools import lru_cache
from collections import defaultdict
d = defaultdict(lambda: count(1))
@lru_cache(maxsize=None)
def get_num(n, c):
return next(d[n])
df['code'] = df.apply(lambda x: '{}_{}'.format(x['Name'][:2].upper(), get_num(x['Name'], x['Cat'])), axis=1)
print(df)
打印:
Name Cat code
0 ajay AL AJ_1
1 ajay AB AJ_2
2 ajay AL AJ_1
3 Alex Ac AL_1
4 Alex Ay AL_2
5 Alex Ac AL_1
6 Alex Ac AL_1
7 Bob Ay BO_1
8 Clarke cv CL_1