我们有两个数据集,其中一个变量为 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
中提取 df1
和 df2
,您可以使用 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']
稍后,您可以使用 merge
将 col1 上的
:df1
和 df2
连接起来
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/