我有三个看起来像这样的列表:
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
操作,但无法解决。
我该怎么做?
答案 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_on
,right_on
和how
。
left_on
允许您在左侧数据框中指定要加入大熊猫的列。
right_on
与left_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