匿名熊猫数据框列

时间:2021-06-06 11:38:57

标签: python pandas dataframe

假设我有以下数据框。

Person_info
(Bob, 2)
(John, 1)
(Bek, 10)
(Bob, 6)

我想通过保留它们的价值来匿名。

Person_info
(Person 1, 2)
(Person 2, 1)
(Person 3, 10)
(Person 1, 6)

我有一种简单的方法来匿名 here,但这无济于事。

有人可以在 Pandas Python 中帮助解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

按照this question,您可以使用strip()split()方法:

out=df['Person_info'].str.strip('()| ').str.split(',',1,expand=True)

然后按照 this answer 使用 factorize() 方法:

out[0]='Person' + pd.Series(pd.factorize(out[0])[0] + 1).astype(str)

最后使用agg()方法:

df['Person_info']=out.agg(tuple,1)

df 的输出:

    Person_info
0   (Person1, 2)
1   (Person2, 1)
2   (Person3, 10)
3   (Person1, 6)

答案 1 :(得分:1)

将您的 names 投射到类别并获取类别代码 ;)

import pandas as pd

dataf = pd.DataFrame(
[('Bob', 2),
('John', 1),
('Bek', 10),
('Bob', 6)], columns=['name','valuex'])

dataf["name"] = dataf["name"].astype("category").cat.codes.map(lambda x: f"Person {x}")

print(dataf)

输出

       name  valuex
0  Person 1       2
1  Person 2       1
2  Person 0      10
3  Person 1       6

更新:

…
dataf["Person_info"] = [info for info in dataf.itertuples(index=False, name=None)]

输出:


       name  valuex     Person_info
0  Person 1       2   (Person 1, 2)
1  Person 2       1   (Person 2, 1)
2  Person 0      10  (Person 0, 10)
3  Person 1       6   (Person 1, 6)