在特定条件下,pandas 中并排的重复行对

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

我有以下代码:

import pandas as pd

data = {
    'Col1': ['John 1', 'John 2', 'John 3', 'Kyle 1', 'Kyle 3', 'Kyle 2'],
    'Col2': ['B', 'C', 'E', 'F', 'F', 'S'],
    'Col3': ['1', '1', '1', '1', '1', '2']
}

df = pd.DataFrame(data)

print(df)

这给出了这个数据帧,其中 Col1(第 1 列)中的数字仅重复两次(例如 John 1 和 Kyle 1):

     Col1 Col2 Col3
0  John 1    B    1
1  John 2    C    1
2  John 3    E    1
3  Kyle 1    F    1
4  Kyle 3    F    1
5  Kyle 2    S    2

我想创建一个函数来迭代 Col1 的名称,并将具有相同编号的行复制到原始行旁边。我想要的输出应该是这样的:

     Col1 Col2 Col3 New Col1 New Col2 New Col3
0  John 1    B    1  Kyle 1        F        1
1  John 2    C    1  Kyle 2        S        2
2  John 3    E    1  Kyle 3        F        1
3  Kyle 1    F    1  John 1        B        1
4  Kyle 3    F    1  John 3        E        1
5  Kyle 2    S    2  John 2        C        1

注意原始 Kyle 1(第 3 行)中的所有值如何被重复,因为“1”与第 0 行中的“John 1”匹配。我尝试在嵌套 for 循环中使用 pd.concat 但我无法得到它可以工作。

python pandas dataframe datatable nested-loops
1个回答
0
投票

用途:

df = df.merge(df.replace({'Col1': {'John':'Kyle','Kyle':'John'}}, regex=True).add_prefix('New '), 
              left_on='Col1', 
              right_on='New Col1')
print (df)
     Col1 Col2 Col3 New Col1 New Col2 New Col3
0  John 1    B    1   John 1        F        1
1  John 2    C    1   John 2        S        2
2  John 3    E    1   John 3        F        1
3  Kyle 1    F    1   Kyle 1        B        1
4  Kyle 3    F    1   Kyle 3        E        1
5  Kyle 2    S    2   Kyle 2        C        1
© www.soinside.com 2019 - 2024. All rights reserved.