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

标签 python pandas csv

我有两个 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/

相关文章:

python - FFmpeg os.system 命令不起作用但在终端中工作

python - 将电子邮件 'From' 字段的 pandas DataFrame 拆分为发件人姓名、电子邮件地址

javascript - 如何将数据从 CSV 文件导入服务器端的 Meteor 集合

java - 在 Java 中将 csv 行转换为 JSON 对象

python - Pandas boxplot 覆盖/覆盖 matplotlib 图

javascript - 使用 Ajax 的 Django POST

python - tkinter 和 GUI 编程方法

python - 编码参数适用于 pandas.read_excel 吗?

python - 如何在Python中将csv文件映射到另一个文件?

Java fileWriter 没有将我的所有输出写入文件