gpt4 book ai didi

python - 如何使用 python-pandas 同时分解两个数据框?

转载 作者:行者123 更新时间:2023-12-01 04:01:39 24 4
gpt4 key购买 nike

我有两个数据框,一个是用户项目评级,另一个是项目的辅助信息:

#df1
A12VH45Q3H5R5I B000NWJTKW 5.0
A3J8AQWNNI3WSN B000NWJTKW 4.0
A1XOBWIL4MILVM BDASK99000 1.0

#df2
B000NWJTKW ....
BDASK99000 ....

现在我想将项目和用户的名称映射到整数 ID。我知道有一种分解的方法:

df.apply(lambda x: pd.factorize(x)[0] + 1)

但我想确保两个数据框中的项目的整数是一致的。所以生成的数据帧是:

#df1
1 1 5.0
2 1 4.0
3 2 1.0

#df2
1 ...
2 ...

你知道如何确保这一点吗?提前致谢!

最佳答案

连接公共(public)列,并应用pd.factorize (或 pd.Categorical ):

codes, uniques = pd.factorize(pd.concat([df1['item'], df2['item']]))
df1['item'] = codes[:len(df1)] + 1
df2['item'] = codes[len(df1):] + 1

例如,

import pandas as pd

df1 = pd.DataFrame(
[('A12VH45Q3H5R5I', 'B000NWJTKW', 5.0),
('A3J8AQWNNI3WSN', 'B000NWJTKW', 4.0),
('A1XOBWIL4MILVM', 'BDASK99000', 1.0)], columns=['user', 'item', 'rating'])

df2 = pd.DataFrame(
[('B000NWJTKW', 10),
('BDASK99000', 20)], columns=['item', 'extra'])

codes, uniques = pd.factorize(pd.concat([df1['item'], df2['item']]))
df1['item'] = codes[:len(df1)] + 1
df2['item'] = codes[len(df1):] + 1

codes, uniques = pd.factorize(df1['user'])
df1['user'] = codes + 1

print(df1)
print(df2)

产量

# df1
user item rating
0 1 1 5
1 2 1 4
2 3 2 1

# df2
item extra
0 1 10
1 2 20
<小时/>

解决该问题的另一种方法(如果您有足够的内存)是合并两个 DataFrame:df3 = pd.merge(df1, df2, on='item', how='outer') ,然后因式分解df3['item'] :

df3 = pd.merge(df1, df2, on='item', how='outer')
for col in ['item', 'user']:
df3[col] = pd.factorize(df3[col])[0] + 1
print(df3)

产量

   user  item  rating  extra
0 1 1 5 10
1 2 1 4 10
2 3 2 1 20

关于python - 如何使用 python-pandas 同时分解两个数据框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36389196/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com