pandas 如何基于其他列的值创建列

but5z9lq  于 2023-01-11  发布在  其他
关注(0)|答案(2)|浏览(91)

我有以下 Dataframe

type_x  Range  myValname
0     g1   0.48        600
1     g2   0.30        600
2     g3   0.62        890
3     g4   0.75        890

我想获取以下 Dataframe

type_x  Range  myValname newCol
0     g1   0.48        600    c1
1     g2   0.30        600    c1
2     g3   0.62        890    c2
3     g4   0.75        890    c2

c1c2的意义在于,如果type_x值的myValname相同,则可以将这两个值视为相同的值。
我的想法是将其转换为字典并Map一些值,但无法得到结果。

df3['newCol'] = df3.groupby('myValname').rank()
vbopmzt1

vbopmzt11#

df["newCol"] = df.groupby("myValname").ngroup().add(1).astype(str).radd("c")
  • 对于每个唯一的“myValname”,取其组顺序(0,1,...)
  • 因为它是从0开始的,所以添加(1)得到1,2,...
  • 然后将其字符串化以从右添加“c”

得到

>>> df
  type_x  Range  myValname newCol
0     g1   0.48        600     c1
1     g2   0.30        600     c1
2     g3   0.62        890     c2
3     g4   0.75        890     c2

.ngroup()之后,这里是:

>>> df.groupby("myValname").ngroup()

0    0
1    0
2    1
3    1
dtype: int64

与PD.factorize的替换:

df["newCol"] = pd.Series(pd.factorize(df["myValname"])[0] + 1, dtype="str").radd("c")

其中,现在pd.factorize将0、1、...赋给“myValname”中的每个唯一值,并且之后进行与之前相同的修改。

uqdfh47h

uqdfh47h2#

您可以使用df. assign()、df. apply()和np. where()函数基于另一列的值向DataFrame添加/追加新列,并在添加新列后返回新的Dataframe。

相关问题