假设我有以下数据框。
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 中帮助解决这个问题吗?
答案 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)