python - 列重新编号 Pandas Dataframe

标签 python pandas

我有一个简单的数据框,例如:

>>> df_test = pd.DataFrame(columns=["ID" ])
>>> df_test["DATE"] = [ '2001-02-01', '2001-03-01', '2001-02-15', '2001-03-15', '2001-02-15', '2001-03-30']
>>> df_test['ID'] = [1,2,3,1,5,4]
>>> df_test
    ID        DATE
0   1  2001-02-01
1   2  2001-03-01
2   3  2001-02-15
3   1  2001-03-15
4   5  2001-02-15
5   4  2001-03-30

我想按如下方式重新排列 ID 列:

>>> df_test
    ID        DATE
0   1  2001-02-01
1   1  2001-03-01
2   1  2001-02-15
3   1  2001-03-15
4   4  2001-02-15
5   4  2001-03-30

基本上每次有一个 ID 小于前一个时,用较小的 ID 填充先例值以保持单调。 我正在尝试以下内容:

df_test.ID.lt(df_test.ID.shift())

这给了我单调的变化点:

0    False
1    False
2    False
3     True
4    False
5     True
Name: ID, dtype: bool

但我不知道如何前进。 我将不胜感激

谢谢!

最佳答案

这个怎么样。不是很优雅,但显然有效(你需要在真实数据上调试它)。请注意,循环在这里很重要,因为每次迭代都应该对当前数据进行操作,而不是对初始数据进行操作。

prev_max = 0
for i in range(1, 6):
    cur_max = df_test[df_test.ID == i].index.max()
    if pd.notnull(cur_max):
        df_test.loc[prev_max:cur_max, 'ID'] = i
        prev_max = cur_max + 1

关于python - 列重新编号 Pandas Dataframe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40384891/

相关文章:

python - 顺序处理多线程输出

pandas - Pandas 数据框python中的偏相关系数

python - 值错误: Cannot use name of an existing column for indicator column

python - 将具有相同 ID 的多行(具有一些非字符串值)合并到 pandas 中的一个分隔行中

python - Django Slug 字段仅在创建新模型时生成,而不是旧的迁移模型时生成

python - 如何在 Python 的 argparse 中对同一组参数调用 parse_args() 两次?

python - 使用正则表达式检查数据集是否存在,无需先读取所有数据集的路径

python - python中两个数组(不同大小)之间可能的唯一组合?

python - 如何从Python对象中删除特定字符串?

python - 如何将转换应用于 pandas 数据框列表?