繁体   English   中英

Python 3.4-Pandas-根据包含重复项的另一个数据框的列提取行

[英]Python 3.4 - Pandas - Extract Rows Based on Column of another Dataframe Including Duplicates

我有两个输入数据框,格式为:

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']列成功复制到输出数据帧的末尾时,我也需要帮助。

我将不胜感激。

谢谢。

采用:

  • 首先重命名Word列,然后按子集[[]]仅选择必要的列
  • 与左联接merge
  • fillna替换所有NaN
  • 如果列的顺序很重要,则最后一次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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM