gpt4 book ai didi

python - 将 pandas Dataframe 的行转换为可迭代的字符串列表

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

假设我有一个数据框 df,它有 2 列,一个 USER_ID 和一个他们购买的产品。

df
USER_ID | PRODUCT
1 a
1 b
1 c
2 d
2 a
2 k

我想将此 DataFrame 转换为一个新的 DataFrame df2,其中每一行都是一个用户,并且产品聚合到一个字符串列表中。

df2
USER_ID | PRODUCT
1 [a,b,c]
2 [d,a,k]

最后,我希望能够找到两个用户的产品列表之间的交集。

我能够创建第二个数据帧,但我使用的方法会产生一个不可迭代的列表。

具体来说,我这样做: df2 = df1.groupby('USER_ID)['产品'].agg(lambda x: x.tolist())

这给了我一个系列,我将其转换回数据帧。

df2 = df2.to_frame()

这给了我正在寻找的 df2 但每个产品列表的长度 = 1,因此我无法将 1 与另一个进行比较以找到产品的交集。例如,当我执行:

s1 = df2.PRODUCT[df2.USER_ID == 1] 
s2 = df2.PRODUCT[df2.USER_ID == 2]

common_elements = list(set(s1).intersection(set(s2)))
common_elements

结果是一个空列表而不是 [a]。我究竟做错了什么?

最佳答案

试试这个:

df3 = pd.crosstab(df2.PRODUCT,df2.USER_ID, margins= True)
print df3[df3['All']>1]

# USER_ID 1 2 All
# PRODUCT
# a 1 1 2
# All 3 3 6

我的解决方案与@Nikil非常相似,所以使用他的。

df2 = df.groupby('USER_ID')['PRODUCT'].apply(list)
df2 = df2.reset_index()
print df2


# USER_ID PRODUCT
# 0 1 [a, b, c]
# 1 2 [d, a, k]

有关交叉表的更多信息,它是一个数据框。

pd.crosstab(df2.PRODUCT,df2.USER_ID, margins= True)

# USER_ID 1 2 All
# PRODUCT
# a 1 1 2
# b 1 0 1
# c 1 0 1
# d 0 1 1
# k 0 1 1
# All 3 3 6

关于python - 将 pandas Dataframe 的行转换为可迭代的字符串列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37685743/

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