我希望根据剩余组值的长度复制行,如下所示。
df_inp = pd.DataFrame(
{
"x": ["a", "a", "a", "a", "b", "b", "b", "b"],
"y": [1, 2, 3, 4, 5, 6, 7, 8],
}
)
df_out = pd.DataFrame(
{
"x": ["a", "a", "a", "a", "a", "a", "b", "b", "b", "b", "b", "b"],
"y": [1, 1, 1, 2, 2, 3, 5, 5, 5, 6, 6, 7],
"z": [2, 3, 4, 3, 4, 4, 6, 7, 8, 7, 8, 8]
}
)我该怎么用毕达通的方式来做这件事?
发布于 2022-06-09 14:39:31
你可以使用groupby和itertools.combinations
from itertools import combinations
out = (df_inp
.groupby('x')
.apply(lambda g: pd.DataFrame(combinations(g['y'], 2), columns=['y', 'z']))
.reset_index('x')
)产出:
x y z
0 a 1 2
1 a 1 3
2 a 1 4
3 a 2 3
4 a 2 4
5 a 3 4
0 b 5 6
1 b 5 7
2 b 5 8
3 b 6 7
4 b 6 8
5 b 7 8https://stackoverflow.com/questions/72562045
复制相似问题