我有以下代码:
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 但我无法得到它可以工作。
用途:
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