gpt4 book ai didi

python - 如何基于迭代另一个 df 的所有行值来对 pandas 数据框进行子集化?

转载 作者:太空宇宙 更新时间:2023-11-03 14:23:30 25 4
gpt4 key购买 nike

我有两个 pandas 数据框:key_dfvalue_df

key_dict = {"coordinates": ["AB1", "AC1", "AD1", "EF1", ... ], "start": [762, 1274, 1587, 1991, ...], "end": [2481, 1789, 1689, 2211, ...] }

key_df = pd.DataFrame(key_dict)

coordinates start end
0 AB1 762 2481
1 AC1 1274 1789
2 AD1 1587 1689
3 EF1 1991 2211
... ... ... ...

value_dict = {"coordinates": ["AD1", "AB1"], "meta_data": [101, 010]}

value_df = pd.DataFrame(value_dict)

coordinates meta_data
0 AD1 101
1 AB1 110
... ... ...

key_df坐标列仅包含唯一值——没有重复。 value_df 也是如此。

我想遍历坐标上的value_df,检查value_df坐标的每个值key_df坐标的值。然后我想返回这些值的 startend

我对数据帧进行子集化并获取 startend 值的想法是创建一个函数:

def parse(x, df):   ### 'x' is each row of value_df$coordinates
df = df[df.coordinates == x]
return (df.start, df.end) ## return as a tuple

我会将该函数称为parse(x, df=key_df)

但是,我不确定如何迭代 value_df.iterrows() 速度很快,但它不保留行数据类型,这可能是一个问题。

最佳答案

只需进行左连接就足够了

key_df = key_df.merge(value_df,on='coordinates',how='left')

另一种方法可能是根据坐标重新索引 value_df

value_df.index = value_df['coordinates']
common_values = set(key_df.coordinates).intersection(set(value_df.index))

value_df.loc[list(common_values),['start','end']]

关于python - 如何基于迭代另一个 df 的所有行值来对 pandas 数据框进行子集化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47786968/

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