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
我有一个这样的数据框:
***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 |