gpt4 book ai didi

python - Pandas:如果连续编号,则按索引查找组

转载 作者:行者123 更新时间:2023-12-01 02:51:44 26 4
gpt4 key购买 nike

我试图从 df2 数据帧中查找索引(第一列或零列 df2[0]),找到具有起始值和结束值(即行)的元组列表。 df2 示例:

COL0  COL1 COL2
4 x y # start 'tuple x' of COL1
5 i j
6 n m # end 'tuple n'
14 f a # start 'tuple f'
15 e b # end 'tuple e'
...

所以COL0连续的值将形成一个组。如果下一行不连续(例如 6-14),则新组开始。选择可能如下:

Crit_a = df2[0][0] + 1 == df2[0][1]

作为输出,我正在寻找一个新的 df3,每行如下:

COL0  COL1 COL2 COL3 COL4 ...
4 x y n m # start values and end values of COL1 and COL2
14 f a e b

我正在看SO here和其他地点。谢谢您的建议。

最佳答案

不完全是您想要的输出,但也许更直观?

我创建一个名为 group_no 的列来标记 COL0 中的连续值。我对列进行了差分,找到了差异不为一的值,然后对结果进行了求和。第一个元素是不明确的(差分时它是 NaN,所以我检查它的值加一是否等于第二个值。如果是,则第一个值是连续的,并分配一个值 1。如果不是,则它不是连续的,并分配一个值值为 0。

df = df.assign(group_no = (df.COL0.diff() != 1).cumsum())
df.group_no.iat[0] = 1 if df.COL0.iat[0] + 1 == df.COL0.iat[1] else 0
df_new = df.groupby('group_no').agg(
{'COL0': ['first'],
'COL1': ['first', 'last'],
'COL2': ['first', 'last']})
>>> df_new
COL2 COL0 COL1
first last first first last
group_no
1 y m 4 x n
2 a b 14 f e

agg 函数采用字典,因此列的结果顺序可以是任意的。要对结果列进行排序,您可以明确地执行此操作,例如:

df_new[[('COL0', 'first'),
('COL1', 'first'),
('COL1', 'last'),
('COL2', 'first'),
('COL2', 'last')]]

这也可能有效:

n = 3  # First three columns of original dataframe.
df_new.loc[:, pd.IndexSlice[df.columns[:n], :]]

关于python - Pandas:如果连续编号,则按索引查找组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44687827/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com