python - 向 Pandas DataFrame 添加一个新列,并使用来自单独 DataFrame 的编码数据而不使用循环?

标签 python dataframe pandas

我遇到的问题是,我有一个大型数据框(约 300,000 行),每个主题有多个行,代表不同条件下的给定值。简化版本如下所示:

In [12]: df1
Out[12]:
   SubID  Condition  Value
0      1          1  0.123
1      1          2  0.234
2      2          1  0.345
3      2          2  0.456
4      3          1  0.567
5      3          2  0.678
6      4          1  0.789

我还有第二个表,只有 80 奇数行,其中包含受试者所属的遗传组。

我希望将该数据添加到第一个 DataFrame 中。简化版的编码表如下所示:

In [17]: df2
Out[17]:
   Subject Number Genetic Group
0               1             A
1               2             C
2               3             A
3               4             B

我想要的最终结果是:

In [19]: df1
Out[19]:
   SubID  Condition  Value Genetic Group
0      1          1  0.123             A
1      1          2  0.234             A
2      2          1  0.345             C
3      2          2  0.456             C
4      3          1  0.567             A
5      3          2  0.678             A
6      4          1  0.789             B

我可以使用 for: 循环,但想知道是否有一种使用 Pandas DataFrame 合并或连接操作的方法可以避免这种情况?非常感谢,

最佳答案

您可以通过 SubID 进行索引,然后使用 join 来获取您想要的内容:

df1.set_index("SubID", inplace=True)
df2.set_index("Subject Number", inplace=True)
df3 = df1.join(df2, how="left")

或者,您可以使用合并来完成而不需要索引:

df3 = df1.merge(df2, left_on="SubID", right_on="Subject Number", how="left")

关于python - 向 Pandas DataFrame 添加一个新列,并使用来自单独 DataFrame 的编码数据而不使用循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15226956/

相关文章:

python - 0x88 棋盘表示

python - 找到 b 使得 a + b 的总和等于 a xor b

python - redis py 和 hgetall - 为什么键值有一个 b""?

python - Django Rest 框架 - 通用 View

r - 如何从长格式数据框中计算成对计数表

python - 使用正则表达式提取代码(不规则的正则表达式键)

python - 如何使用 Airflow 来编排简单的 pandas etl python 脚本?

Python Pandas - 多列重复条目中的最高值

python - 使用 Pandas 插值将每月值转换为每日值

python - 如何将规范化函数应用于 pandas 字符串系列?