python - 比较/映射不同数据帧中的不同系列

标签 python pandas dataframe

我有两个数据框。数据框“A”是主数据框,有 3 列“Number”、“donation”和“Var1”。数据框 B 有 2 列“编号”和“位置”。 DataFrame B 中的“Number”列是 A 中“Number”的子集。我想做的是在 DataFrame A 中形成一个新列 - “NEW”,它将映射该列中的数字值,如果它是存在于 DataFrame B 中的值将添加为 1,否则所有其他值将为 0。

>>>DFA
Number donation Var1
243     4        45
677     56       34
909     34       22
565     78       24 
568     90       21
784     33       88
787     22       66
>>>DFB
Number location
909     PB
565     WB
784     AU

这是两个数据框,我希望 DFA 具有一个看起来像这样的新列。

>>>DFA
Number donation Var1 NEW
243     4        45   0 
677     56       34   0
909     34       22   1
565     78       24   1
568     90       21   0
784     33       88   1
787     22       66   0

这有一个新列,如果数字存在于 DFB 中,则值为 1;如果不存在,则值为 0。

最佳答案

您可以使用isin方法:

DFA['NEW'] = (DFA['Number'].isin(DFB['Number'])).astype(int)
<小时/>

例如,

import pandas as pd

DFA = pd.DataFrame({'Number': [243, 677, 909, 565, 568, 784, 787],
                    'Var1': [45, 34, 22, 24, 21, 88, 66],
                    'donation': [4, 56, 34, 78, 90, 33, 22]})
DFB = pd.DataFrame({'Number': [909, 565, 784], 'location': ['PB', 'WB', 'AU']})

DFA['NEW'] = (DFA['Number'].isin(DFB['Number'])).astype(int)
print(DFA)

产量

   Number  Var1  donation  NEW
0     243    45         4    0
1     677    34        56    0
2     909    22        34    1
3     565    24        78    1
4     568    21        90    0
5     784    88        33    1
6     787    66        22    0

关于python - 比较/映射不同数据帧中的不同系列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40191218/

相关文章:

python - Pandas df 使用 flask-sqlalchemy 到数据库

python - 根据一行中的值对 pandas 数据框的列进行排序

r - 列表输出被截断 - 如何在 R 中使用 str() 扩展列出的变量

python - 如何迭代后缀列表以添加到列表中每个变量的末尾?

python - Pandas 使用嵌套数据框列的总和创建一列

python - 无法更改特定位置数据帧的值

python - 为后续打印添加永久字符

Python Postgres psycopg2 ThreadedConnectionPool 耗尽

python - 使用 Python 2.7.5 将文件夹中的所有压缩文件解压缩到同一文件夹

python - 选定行的性能,其中条件是与集合的匹配百分比