python - 在两个数据之间保持相同的因式分解

标签 python pandas

我们有两个数据集,其中一个变量为 col1。 第二个数据中缺少某些级别。例如让

import pandas as pd
df1 = pd.DataFrame({'col1':["A","A","B","C","D","E"]})
df2 = pd.DataFrame({'col1':["A","B","D","E"]})

当我们对 df1 进行因式分解时

df1["f_col1"]= pd.factorize(df1.col1)[0]
df1

我们得到了

    col1    f_col1
0   A   0
1   A   0
2   B   1
3   C   2
4   D   3
5   E   4

但是当我们为 df2 这样做时

df2["f_col1"]= pd.factorize(df2.col1)[0]
df2

我们得到

    col1    f_col1
0   A   0
1   B   1
2   D   2
3   E   3

这不是我想要的。我想在数据之间保持相同的因式分解,即在 df2 中我们应该有类似的东西

    col1    f_col1
0   A   0
1   B   1
2   D   3
3   E   4

谢谢。

PS:这两个数据集并不总是同时可用,因此我无法将它们连接起来。这些值应存储在 df1 中,并在 df2 可用时在 df2 中使用。

最佳答案

您可以连接两个 DataFrame,然后对整个列应用一次 pd.factorize:

import pandas as pd
df1 = pd.DataFrame({'col1':["A","B","C","D","E"]})
df2 = pd.DataFrame({'col1':["A","B","D","E"]})

df = pd.concat({'df1':df1, 'df2':df2})
df['f_col1'], uniques = pd.factorize(df['col1'])
print(df)

产量

      col1  f_col1
df1 0    A       0
    1    B       1
    2    C       2
    3    D       3
    4    E       4
df2 0    A       0
    1    B       1
    2    D       3
    3    E       4
<小时/>

要从 df 中提取 df1df2,您可以使用 df.loc:

In [116]: df.loc['df1']
Out[116]: 
  col1  f_col1
0    A       0
1    B       1
2    C       2
3    D       3
4    E       4

In [117]: df.loc['df2']
Out[117]: 
  col1  f_col1
0    A       0
1    B       1
2    D       3
3    E       4

(但请注意,由于如果您可以将矢量化操作应用于大型 DataFrame 一次而不是多次应用于较小的 DataFrame,矢量化操作的性能会提高,因此您最好保留 df 并放弃 df1 df2...)

<小时/>

或者,如果您必须先生成 df1['f_col1'],然后计算 df2['f_col1'] 稍后,您可以使用 mergecol1 上的 df1df2 连接起来:

import pandas as pd
df1 = pd.DataFrame({'col1':["A","B","C","D","E"]})
df2 = pd.DataFrame({'col1':["A","B","D","E"]})

df1['f_col1'], uniques = pd.factorize(df1['col1'])
df2 = pd.merge(df2, df1, how='left')
print(df2)

产量

  col1  f_col1
0    A       0
1    B       1
2    D       3
3    E       4

关于python - 在两个数据之间保持相同的因式分解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41416578/

相关文章:

python - 如何将python代码作为aws中云形成模板的一部分包含在内?

python - 如何使用 python 在文本文件中搜索整数 (x,y)?

Python, boolean - 条件和控制流 - 不理解

python - 如果某些列匹配且某些列不同,如何连接行

python - 根据 Pandas 中正则表达式的条件测试创建一个新列

python - Pandas :对同一列中的情侣进行分组

python - 如何检查 pandas DataFrame 中的列值类型

python - 没有窗口的 Pandas 系列的滚动最小值/累积最小值/扩展最小值

python - 如何将 pandas 数据透视表转换为 JSON

使用 Nuitka 进行 Python 独立编译