gpt4 book ai didi

python - 从数据框中提取特定行

转载 作者:太空宇宙 更新时间:2023-11-04 08:40:07 25 4
gpt4 key购买 nike

我有一个数据框 df1,其中包含两列 'ids' 和 'names' -

ids     names
fhj56 abc
ty67s pqr
yu34o xyz

我有另一个数据框 df2,其中一些列是 -

user     values                       
1 ['fhj56','fg7uy8']
2 ['glao0','rt56yu','re23u']
3 ['fhj56','ty67s','hgjl09']

我的结果应该给我来自 df2 的那些用户,这些用户的值至少包含来自 df1 的一个 ID,并且还告诉我哪些 ID 负责将它们放入结果表中。结果应该是这样的 -

   user     values_responsible     names
1 ['fhj56'] ['abc']
3 ['fhj56','ty67s'] ['abc','pqr']

用户 2 没有出现在结果表中,因为它的值不存在于 df1 中。

我尝试按如下方式进行 -

df2.query('values in @df1.ids')

但这似乎效果不佳。

最佳答案

您可以遍历行,然后使用 .locisindf2 中找到匹配的行。我将这个过滤后的数据框转换成字典

ids = []
names = []
users = []
for _, row in df2.iterrows():
result = df1.loc[df1['ids'].isin(row['values'])]
if not result.empty:
ids.append(result['ids'].tolist())
names.append(result['names'].tolist())
users.append(row['user'])

>>> pd.DataFrame({'user': users, 'values_responsible': ids, 'names': names})[['user', 'values_responsible', 'names']]
user values_responsible names
0 1 [fhj56] [abc]
1 3 [fhj56, ty67s] [abc, pqr]

或者,对于整齐的数据:

ids = []
names = []
users = []
for _, row in df2.iterrows():
result = df1.loc[df1['ids'].isin(row['values'])]
if not result.empty:
ids.extend(result['ids'].tolist())
names.extend(result['names'].tolist())
users.extend([row['user']] * len(result['ids']))

>>> pd.DataFrame({'user': users, 'values_responsible': ids, 'names': names})[['user', 'values_responsible', 'names']])
user values_responsible names
0 1 fhj56 abc
1 3 fhj56 abc
2 3 ty67s pqr

关于python - 从数据框中提取特定行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45552952/

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