大熊猫加入特定列的索引

时间:2019-04-02 06:39:48

标签: python pandas join merge

我有三个看起来像这样的列表:

finishAffinity()

我想要一个看起来像这样的数据框:

l1 = ["a", "b" , "c", "d", "e", "f", "g"]

l2 = ["a", "d", "f"]

l3 = ["b", "g"]

我尝试使用| l1 | l2 | l3 | |----|------|------| | a | a | None | | b | None | b | | c | None | None | | d | d | None | | e | None | None | | f | f | None | | g | None | g | / join操作,但无法解决。

我该怎么做?

2 个答案:

答案 0 :(得分:2)

您可以使用列表推导来做到这一点:

import pandas as pd
import numpy as np

a = [i if i in l2 else np.nan for i in l1]
b = [i if i in l3 else np.nan for i in l1]

df = pd.DataFrame({'l1': l1, 'l2': a, 'l3': b})
print(df)

输出:

  l1   l2   l3
0  a    a  NaN
1  b  NaN    b
2  c  NaN  NaN
3  d    d  NaN
4  e  NaN  NaN
5  f    f  NaN
6  g  NaN    g

答案 1 :(得分:1)

pd.merge中有一些可用于此目的的参数:left_onright_onhow

left_on允许您在左侧数据框中指定要加入大熊猫的列。

right_onleft_on类似,但适用于正确的数据帧。

how允许您指定想要的联接类型。在这种情况下,您可能想要执行左联接。

了解更多信息:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.merge.html

您可以执行以下操作:

l1 = ["a", "b" , "c", "d", "e", "f", "g"]
l2 = ["a", "d", "f"]
l3 = ["b", "g"]

df = pd.DataFrame({'l1': l1})
df_l2 = pd.DataFrame({'l2': l2})
df_l3 = pd.DataFrame({'l3': l3})
df = pd.merge(df, df_l2, left_on='l1', right_on='l2', how='left') 
df = pd.merge(df, df_l3, left_on='l1', right_on='l3', how='left') 

输出:

l1   l2   l3
0  a    a  NaN
1  b  NaN    b
2  c  NaN  NaN
3  d    d  NaN
4  e  NaN  NaN
5  f    f  NaN
6  g  NaN    g