如何基于列中的列表值加入Panda DataFrames

时间:2018-11-17 07:25:14

标签: python pandas

有两个Pandas DataFrame

df_A = pd.DataFrame([['r1', ['a','b']], ['r2',['aabb','b']], ['r3', ['xyz']]], columns=['col1', 'col2'])

 col1     col2
 r1     [a, b]
 r2  [aabb, b]
 r3      [xyz]


df_B = pd.DataFrame([['a', 10], ['b',2]], columns=['C1', 'C2'])

  C1  C2
   a  10
   b   2

我想加入两个数据框,例如df_C是

col1 C1  C2
r1   a   10
r1   b    2
r2   aabb 0
r2   b    2
r3   xyz  0 

1 个答案:

答案 0 :(得分:1)

您需要:

df = pd.DataFrame([['r1', ['a','b']], ['r2',['aabb','b']], ['r3', ['xyz']]], columns=['col1', 'col2'])

df= pd.DataFrame({'col1':np.repeat(df.col1.values, df.col2.str.len()),
                        'C1':np.concatenate(df.col2.values)})

df_B = pd.DataFrame([['a', 10], ['b',2]], columns=['C1', 'C2'])
df_B = dict(zip(df_B.C1, df_B.C2))
# {'a': 10, 'b': 2}

df['C2']= df['C1'].apply(lambda x: df_B[x] if x in df_B.keys() else 0)

print(df)

输出:

    col1  C1    C2
0   r1    a     10
1   r1    b     2
2   r2    aabb  0
3   r2    b     2
4   r3    xyz   0

修改

下面的代码将为您提供每一行中列表的长度。

print(df.col2.str.len())

# 0    2
# 1    2
# 2    1

np.repeat将重复使用以上获得的基于col1的长度中的值。 例如。 r1,r2将重复两次。

print(np.repeat(df.col1.values, df.col2.str.len())
# ['r1' 'r1' 'r2' 'r2' 'r3']

在col2.values上使用np.concatenate将产生简单的一维列表

print(np.concatenate(df.col2.values))
# ['a' 'b' 'aabb' 'b' 'xyz']