python pandas 重复列中的单元格并连接

python pandas repeat cells from column and concatenate

我有一个这样的数据框:

***Out[112]:*** 
  Cell Name   Site  Cell Count
0    04301A  04301           3
1    04301B  04301           3
2    04301C  04301           3
3    04302A  04302           3
4    04302B  04302           3
5    04302C  04302           3
6    04303A  04303           2
7    04303B  04303           2
8    04304A  04304           3

并且我想通过 'Cell Count' 列重复 'Cell Name' 列,然后将每个单元格名称与同一站点中的其他单元格名称连接起来,因此输出将如下所示:

***Out[119]:*** 
  Repeated Cells   Site  Cell-Neighbor
0         04301A  04301  04301A-04301B
1         04301A  04301  04301A-04301C
2         04301B  04301  04301B-04301A
3         04301B  04301  04301B-04301C
4         04301C  04301  04301C-04301A
5         04301C  04301  04301C-04301B
6         04302A  04302  04302A-04302B
7         04302A  04302  04302A-04302C
8         04302B  04302  04302B-04302A
9         04302B  04302  04302B-04302C

我设法重复单元格并使用以下行将主题放入新的 DataFrame 中

repeated_cells = df_gcell['Cell Name'].repeat(df_gcell['Cell Count'] - 1).values

我从计数中减去 (1),因为我不需要单元格与它自己连接,

我现在的问题是如何从同一站点导入其他单元格并将它们与单元格连接!!

  • 查看您的输入和输出很明显您需要 排列站点
  • 为了简化一点,我定义的目标列名称中没有空格
  • 您来自 站点 04304 的数据不一致,因此被删除
import io
import itertools

df = pd.read_csv(io.StringIO("""  Cell Name   Site  Cell Count
0    04301A  04301           3
1    04301B  04301           3
2    04301C  04301           3
3    04302A  04302           3
4    04302B  04302           3
5    04302C  04302           3
6    04303A  04303           2
7    04303B  04303           2
8    04304A  04304           3"""),sep="\s\s+",engine="python",)

df.groupby("Site", as_index=False).agg(
    CellNeighbor=(
        "Cell Name",
        lambda s: ["-".join(c) for c in itertools.permutations(s, 2)],
    )
).explode("CellNeighbor").dropna().assign(
    RepeatedCells=lambda d: d["CellNeighbor"].str.split("-").str[0]
)

输出

Site CellNeighbor RepeatedCells
0 4301 04301A-04301B 04301A
0 4301 04301A-04301C 04301A
0 4301 04301B-04301A 04301B
0 4301 04301B-04301C 04301B
0 4301 04301C-04301A 04301C
0 4301 04301C-04301B 04301C
1 4302 04302A-04302B 04302A
1 4302 04302A-04302C 04302A
1 4302 04302B-04302A 04302B
1 4302 04302B-04302C 04302B
1 4302 04302C-04302A 04302C
1 4302 04302C-04302B 04302C
2 4303 04303A-04303B 04303A
2 4303 04303B-04303A 04303B