【发布时间】:2022-01-09 20:43:40
【问题描述】:
我有这个数据。
df1 = pd.DataFrame({"user": [1942, 95870, 85228, 6636],
"0": [1524, 8788, 9899, 27172],
"1": [1333, 4476, 78783, 90832],
"2": [2021, 2022, 34522, 38479]})
df1.set_index(df1['user'])
print(df1)
user 0 1 2
0 1942 1524 1333 2021
1 95870 8788 4476 2022
2 85228 9899 78783 34522
3 6636 27172 90832 38479
df1 和 df2 的行数相同(实际数据为 100 万),df2 的每一行由 方括号 中的多个数字组成,用逗号分隔为如下:
df2 = pd.DataFrame({
"0": [[1123, 2021, 8788]]})
方括号中的数字从 1 到 20 不等,在本例中只有 3。但是,df2 和 df1 的数字行是相同的。
print(df2)
0
0 [1123, 2021, 8788]
我想做的是从df1 中选择一个用户,例如user1942 并比较该行(1524, 1333, 2021) 中的三个数字中的任何一个是否在df2 @987654332 中的任何相应方括号中@。如果为 True,则为布尔值 1,否则为 0,或任何其他表示形式都会有所帮助。
更新:应该逐行比较。这是df1 中的一行,而不是df2 中的相应行。
输出可能看起来像这样,或者更接近: 输出:因为 2021 在 df2 中,所以答案是 True。然后移动到df1中的下一个用户,将该用户的3个数字与df2中对应的行号进行比较,等等。
user status
1942 1
...
我知道有很多关于比较多列的问题,但我找不到可重现或类似于此上下文的内容。
【问题讨论】:
-
不清楚,要一个一个做这个吗?或同时为所有行。另外,你只显示了 df2 的 1 行,如果你有很多会发生什么?请更新您的问题以澄清这种歧义。
-
我已添加更新以澄清您的问题。再次确认,
df2中的行很多,与df1大小相同,因此在某种意义上可以将比较视为“成对”。不幸的是,我无法为df2生成更多行,但我希望这个想法很明确。 -
@SquidGame 每行的
df1和df2中是否总是有唯一的数字? -
@ShubhamSharma 一些数字是唯一的,但其他数字不是,我正在做的是比较
df行中的任何数字是否在df2中的任何数字中。某些数字可能会在df2中重复,因为它们是通过预测函数获得的。我希望这能澄清你的问题。
标签: python pandas dataframe for-loop compare