删除数据帧中具有多个值的行,并分离多个值



1.输入:我的数据帧在名称中包含a和b值

ID name
1  a1/x,b1
2  a1,a2v,a3,d12,L2c,f13/w
3  a5,a6,C3,b2/y
4  a8/g,b9/p

2.预期输出_1:我想删除所有包含超过1 a和1 b值的名称

ID name
1  a1/x,b1
4  a8/g,b9/p

3.预期输出_2:我希望将多个名称值拆分为单个a和b值,如下所示

ID name
1  a1/x,b1
2  a1,d12
3  a2v,L2c
4  a3,f13/w
5  a5,C3
6  a6,b2/y
7  a8/g,b9/p

我之前把数据放在[[a1,a2],[b1,b3]]中,这是一种列表形式,然后去掉括号,按照输入取数据。

我尝试过的代码

Output_2代码:df["名称"]=df["姓名"].str.split(","(explode((.agg(",&;.join((df

但它不起作用,我还没有为output_1找到代码。

对于输出1:

df = df[~df["name"].apply(lambda x: x.count("a") > 1 and x.count("b") > 1)]
print(df)

打印:

ID   name
0   1  a1,b1
3   4  a8,b9

对于输出2:

def fn(x):
l = x.split(",")
a = [v for v in l if v.startswith("a")]
b = [v for v in l if v.startswith("b")]
return list(map(list, zip(a, b)))

df["name"] = df["name"].apply(fn)
df = df.explode("name").reset_index(drop=True)
df["name"] = df["name"].apply(",".join)
df["ID"] = df.index + 1
print(df)

打印:

ID   name
0   1  a1,b1
1   2  a1,b1
2   3  a2,b2
3   4  a3,b3
4   5  a5,b3
5   6  a6,b2
6   7  a8,b9

编辑:具有更新的输入数据:

输出1:

df = df[~df["name"].apply(lambda x: x.count("a") > 1 or x.count("b") > 1)]
print(df)
ID       name
0   1    a1/x,b1
3   4  a8/g,b9/p

输出2:

def fn(x):
l = x.split(",")
a = [v for v in l if v.startswith("a")]
b = [v for v in l if not v.startswith("a")]
return list(map(list, zip(a, b)))

df["name"] = df["name"].apply(fn)
df = df.explode("name").reset_index(drop=True)
df["name"] = df["name"].apply(",".join)
df["ID"] = df.index + 1
print(df)
ID       name
0   1    a1/x,b1
1   2     a1,d12
2   3    a2v,L2c
3   4   a3,f13/w
4   5      a5,C3
5   6    a6,b2/y
6   7  a8/g,b9/p

最新更新