Python 如何基于列中的列表值联接Panda数据帧
有两个数据帧Python 如何基于列中的列表值联接Panda数据帧,python,pandas,Python,Pandas,有两个数据帧 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
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 is
col1 C1 C2
r1 a 10
r1 b 2
r2 aabb 0
r2 b 2
r3 xyz 0
你需要:
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
,将生成纯1D列表
print(np.concatenate(df.col2.values))
# ['a' 'b' 'aabb' 'b' 'xyz']
谢谢,我想,它可能需要专家级的知识来理解“unsetting”和我正在寻找的是一样的。谢谢,你能解释一下你在这里做什么吗
df=pd.DataFrame({'col1':np.repeat(df.col1.values,df.col2.str.len(),'C1':np.concatenate(df.col2.values)})
@Watt我已经编辑了我的答案。希望对你有帮助。