Python 3.4 - Pandas - 基于包含重复项的另一个数据帧的列提取行

问题描述 投票:0回答:1

我有两个输入数据帧格式:

Word    colA colB colC ID
python   A     B    C   1
word     D     E    F   1
of       G     H    I   1
python   J     K    L   2
is       M     N    O   2
of       P     Q    R   3

另一个格式为:

V1       V2    V3   V4
the     0.1   0.2  0.3
python  0.4   0.5  0.6
excel   0.6   0.7  0.8
is      0.9   0.10 0.6
access  0.7   0.5  0.6
of      0.5   1.2  7.8
tell    0.9   3.2  4.5
pandas  0.5   0.4  0.3

让我们调用第一个数据帧df1和第二个数据帧df2。

我想知道如何基于V1将df2子集与df1 ['Word']具有相同的术语。如果V1中的术语在df1 ['Word']中没有匹配项,我希望这些行用零填充。另外,另一个关键点是我想包含重复项。我还想将'ID'列复制到df2数据帧。

我的预期输出将采用以下格式:

   V1    V2    V3   V4  ID
python  0.4   0.5  0.6  1
word    0.0   0.0  0.0  1
of      0.5   1.2  7.8  1
python  0.4   0.5  0.6  2
is      0.9   0.10 0.6  2
of      0.5   1.2  7.8  3

我能够在输出数据帧中成功识别和子集术语,而不显示重复项。但是包含重复的术语对我来说有点挑战。我还需要帮助才能成功地将df1 ['ID']列复制到输出数据帧的末尾。

我很感激能得到的任何帮助。

谢谢。

python python-3.x pandas dataframe
1个回答
1
投票

使用:

  • 首先重命名列Word并通过子集[[]]仅选择必要的列
  • merge与左连接
  • NaN替换所有fillnas
  • 如果列的顺序很重要,最后reindex

df = (pd.merge(df1.rename(columns={'Word':'V1'})[['V1', 'ID']], 
               df2, on='V1', how='left')
        .fillna(0)
        .reindex(columns=['V1','V2','V3','V4','ID']))
print (df)
       V1   V2   V3   V4  ID
0  python  0.4  0.5  0.6   1
1    word  0.0  0.0  0.0   1
2      of  0.5  1.2  7.8   1
3  python  0.4  0.5  0.6   2
4      is  0.9  0.1  0.6   2
5      of  0.5  1.2  7.8   3
© www.soinside.com 2019 - 2024. All rights reserved.