AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / coding / 问题

All perguntas(coding)

Martin Hope
X-L
Asked: 2025-04-11 05:29:00 +0800 CST

Execução do método ConcurrentDictionary GetOrAdd valueFactory [duplicado]

  • 5
Esta pergunta já tem respostas aqui :
O uso da avaliação preguiçosa ao inserir em um ConcurrentDictionary impede que o valor solicitado seja calculado várias vezes? (1 resposta)
É garantido que ConcurrentDictionary.GetOrAdd() invocará valueFactoryMethod apenas uma vez por chave? (3 respostas)
ConcurrentDictionary + Lazy -- a instanciação ocorreria apenas uma vez? (1 resposta)
Fechado ontem .

Na documentação do ConcurrentDictionary é declarado que a fábrica de valores é chamada fora dos bloqueios e que uma chave/valor pode ser inserido por outro thread enquanto valueFactory está gerando um valor. Você não pode confiar que só porque valueFactory foi executado, seu valor produzido será inserido no dicionário e retornado.

Meu código original se parece com isso:

public class MyClass
{
  private readonly ConcurrentDictionary<string, Task<string>> myData = new();

  public Task<string> GetData(string key)
  {
    return myData.GetOrAdd(key, key => longCalculation(key));
  }
}

Se várias threads chamarem MyClass.GetData("theSameKey")ao mesmo tempo, longCalculation"theSameKey" será executado várias vezes porque valueFactoryserá delegado a outra string.

Para evitar ter que longCalculationexecutar desnecessariamente, alterei meu código para usar Lazy, conforme sugerido por JG no SD, para que o delegado fosse executado apenas uma vez:

public class MyClass
{
  private readonly ConcurrentDictionary<string, Lazy<Task<string>>> myData = new();

  public async Task<string> GetData(string key)
  {
    var lazyTask = new new Lazy<Task<string>>(() => longCalculation(key),
      LazyThreadSafetyMode.ExecutionAndPublication);
    var task = myData.GetOrAdd(key, lazyTask).Value;
    return await task;
  }
}

Esta versão, se houver várias chamadas de threads, MyClass.GetData("theSameKey") longCalculationé executada apenas uma vez. Embora eu tenha uma correção para obter o comportamento desejado, gostaria de ter mais detalhes explicando por que isso acontece.

c#
  • 1 respostas
  • 54 Views
Martin Hope
CSStat
Asked: 2025-04-11 04:59:44 +0800 CST

Agrupar linhas por grupo e intervalos de tempo sobrepostos e, em seguida, manter a linha de maior prioridade em R

  • 7

Eu tenho um conjunto de dados como segue

data<- data.frame(group_ID= c("cred", "cred", "cred", "cyellow", "cyellow", "cgreen"), 
                  Start =c("2024-06-27,10:31:34", "2024-06-27,10:42:26", "2024-06-27,12:33:00", "2024-06-27,12:34:00","2024-06-27,12:54:00","2024-06-28,14:58:51"), 
End = c("2024-06-27,11:31:34","2024-06-27,11:42:26","2024-06-27,13:33:00", "2024-06-27,13:34:00","2024-06-27,13:54:00","2024-06-28,15:54:14"),
priorityrank=c(1, 2, 2, 2, 3, 3),
goaltokeep = c(TRUE, FALSE, TRUE, TRUE, FALSE, TRUE))

Onde cada linha representa uma observação de um grupo para uma determinada janela de tempo. Às vezes, várias pessoas observam o mesmo grupo ao mesmo tempo, então atribuímos uma "classificação de prioridade" onde números menores são a observação preferida, com 1 sendo a mais preferida e 3 sendo a menos preferida. Às vezes, grupos diferentes são observados ao mesmo tempo e isso não importa.

Quero manter a linha com o menor valor numérico "priorityrank" para um determinado grupo quando mais de uma janela de tempo de observação se sobrepõe. Com os dados de exemplo, a coluna "meta a manter" mostra as linhas que devem ser mantidas (VERDADEIRO) no conjunto de dados final.

Comecei tentando avaliar a sobreposição de diferentes linhas por número de ID . No entanto, quando executo os dados de exemplo (meus ou fornecidos pelo comentarista) usando o código sugerido por Alex (não faz login há mais de 3 anos, então não posso perguntar), recebo o seguinte erro.

Error in eval_tidy(args[[j]], mask) : 
  no function to return from, jumping to top level

Esta questão de SQL chega perto , mas não sei nada sobre SQL ou como fazer comparações em R.

Agradeço desde já a sua contribuição e ajuda! Estou com dificuldades com isso há algum tempo.


ATUALIZAR:

Muito obrigado a todos! Estou tendo um erro inesperado em cerca de 60 dos 1.000 casos com ambas as soluções possíveis quando uso o dataframe maior. Mesmo quando classifico meu dataframe por hora de início, esses erros persistem.

Isolei uma dessas instâncias que gera o erro, e aqui está reproduzida abaixo como um exemplo para trabalhar. Não tenho certeza do que está errado, já que o início vem antes do fim para qualquer linha.

dataerr<- data.frame(group_ID= c("cred", "cred", "cred"), 
                  Start =c("2024-06-27,12:33:00","2024-06-27,13:26:57","2024-06-27,13:33:36"), 
End = c("2024-06-27,13:33:00","2024-06-27,13:48:49","2024-06-27,13:49:42"),
priorityrank=c(2, 3, 2),
goaltokeep = c(TRUE, FALSE, TRUE))

Aqui estão os erros de cada solução. Não sei como interpretá-los, mesmo depois de pesquisar um pouco online, pois os começos parecem vir antes dos fins. Talvez seja algo entrelinhas?

Solução do erro de Friede:

Error in `iv()`:
! `start` must be less than `end`.
ℹ `start` is not less than `end` at locations: `2`.

Solução para o erro r2evans:

Error in `[[<-.data.frame`(`*tmp*`, col, value = c("cred", "cred", "cred",  : 
  replacement has 6 rows, data has 3
  • 3 respostas
  • 89 Views
Martin Hope
JJL
Asked: 2025-04-11 04:47:58 +0800 CST

Dividir números de versão para encontrar a versão mais recente [duplicado]

  • 10
Esta pergunta já tem respostas aqui :
Classificação de vetores de caracteres contendo versões semânticas (5 respostas)
Fechado há 4 horas .

Estou trabalhando com números de versão e preciso obter a versão mais recente. Neste caso, é 1.11.3. Tenho uma solução funcional, mas espero que haja uma maneira mais elegante de fazer isso em R. Aqui está minha solução atual com um pequeno conjunto de dados. Alguém tem uma maneira melhor de fazer isso? De preferência, algo apenas com funções básicas.

test <- c("0.6.0", "1.0.3", "1.6.7", "1.8.0", "1.5.4", "1.10.0", "1.2.0", "1.11.3", "1.9.4")
split_test <- do.call(rbind, strsplit(test, ".", fixed=TRUE))
split_test <- matrix(as.numeric(split_test), ncol = ncol(split_test))
paste(split_test[order(-split_test[,1], -split_test[,2], -split_test[,3])[1],], collapse=".")
  • 1 respostas
  • 59 Views
Martin Hope
Evert
Asked: 2025-04-11 04:47:41 +0800 CST

Tipo genérico de Typescript que mapeia para T | indefinido se todas as propriedades em T forem anuláveis

  • 6

Estou tentando escrever um tipo genérico Typescript que pode ser usado da seguinte maneira:

/* All properties are nullable */
type A = {
  a: string | null,
  b: string | null;
}

type G_A = MyType<A>; // A | undefined

/* At least one property is not nullable */
type B = {
  a: string;
  b: string | null;
}

type G_B = MyType<B>; // B

Portanto, o objetivo de MyType<T>é que ele retorne T | undefinedse todas Tas propriedades de 's puderem ser null, mas se não, ele deve retornar apenas T.

Estou meio perdido sobre como abordar isso, então não tenho nada que eu tenha tentado para compartilhar.

typescript
  • 2 respostas
  • 32 Views
Martin Hope
bugzy
Asked: 2025-04-11 04:25:05 +0800 CST

Como faço para enviar uma solicitação de postagem http com uma matriz como parâmetro de postagem no Laravel

  • 5

Estou tentando enviar uma solicitação de postagem em Laravel. Abaixo está meu código:

$response = Http::withToken($local_signature)
    ->post('myUrl', [
        "amount" => $amount,
        "narration" => $narration,
        "currency" => $currency,
        "beneficiary_name" => $beneficiary_name,
        "reference" => $reference,
        "debit_currency" => $debit_currency,
        "callback_url" => $callback_url,

        "meta" => array(

            "account_number" => $account_number,
            "routing_number" => $routing_number,
            "swift_code" => $swift_code,
            "bank_name" => $bank_name,
            "beneficiary_name" => $beneficiary_name,
            "beneficiary_address" => $beneficiary_address,
            "beneficiary_country" => $beneficiary_country,

        )
    ]);

Por algum motivo, o meta não é visto pelo servidor, pois continuo recebendo o erro "meta é necessário e deve ser um array não vazio". Como faço para enviar esta solicitação de postagem com o meta como um array?

Preciso que a solicitação fique assim:

{
  "amount": 500,
  "narration": "Sample USD Transfer",
  "currency": "USD",
  "beneficiary_name": "Mark Cuban",
  "meta": [
    {
     "account_number": "09182972BH",
     "routing_number": "0000000002993",
     "swift_code": "ABJG190",
     "bank_name": "BANK OF AMERICA, N.A., SAN FRANCISCO, CA",
     "beneficiary_name": "Mark Cuban",
     "beneficiary_address": "San Francisco, 4 Newton",
     "beneficiary_country": "US"
    }
  ]
}

Alguém precisa de ajuda?

  • 1 respostas
  • 59 Views
Martin Hope
Mircea Baja
Asked: 2025-04-11 04:10:02 +0800 CST

O tempo de vida do loop for baseado em intervalo do C++23 corrige a interação com argumentos `std::generator`

  • 6

O C++23 deveria corrigir problemas com forloops baseados em intervalo. O padrão C++ agora tem uma redação que posso rastrear até p2718r0 , incluindo o seguinte exemplo no final da seção "A instrução for baseada em intervalo [stmt.ranged]" (observe o undefined behaviorcomentário:

using T = std::list<int>;
const T& f1(const T& t) { return t; }
const T& f2(T t) { return t; }
T g();

void foo() {
  for (auto e : f1(g())) {} // OK, lifetime of return value of g() extended
  for (auto e : f2(g())) {} // undefined behavior
}

Digamos que eu escreva uma corrotina usando o C++23 std::generatorque recebe um argumento por valor, ou seja, seguindo a regra CP.53 das diretrizes básicas do C++: Parâmetros para corrotinas não devem ser passados ​​por referência :

#include <generator>
#include <string>
#include <iostream>

std::generator<std::string> generator_f(std::string x) {
  co_yield x;
}

std::string sample_g() { return "abc"; }

int main() {
  for(const auto& elem: generator_f(sample_g())) {
    std::cout << elem << "\n";
  }
  return 0;
}

Presumo que, com base no exemplo do padrão C++, o código no forloop main()acima seja um comportamento indefinido.

Qual é a lógica por trás da regra de comportamento indefinido ilustrada pelo exemplo no padrão C++? A desvantagem é que ela torna o uso de std::generatorargumentos with em um loop propenso a erros (que é onde você gostaria de usar um gerador, ou seja, não corrige realmente problemas de tempo de vida com instruções forbaseadas em intervalo ).for

c++
  • 1 respostas
  • 72 Views
Martin Hope
Robin
Asked: 2025-04-11 03:54:07 +0800 CST

Como posso alterar a velocidade da animação de um AnimatedTile e aplicá-la aos blocos existentes?

  • 5

Eu tenho um Unity Tilemape dentro desse tilemap estão presentes alguns AnimatedTiles.

Quero alterar programaticamente os valores das velocidades mínima e máxima do bloco animado m_MinSpeede , m_MaxSpeedenquanto o programa é executado, aplicar esses novos valores a todos os blocos existentes no meu mapa de blocos.

Eu tentei fazer o seguinte:

//Set the animation speed of My Animated Tile to 1
Resources.Load<AnimatedTile>("My Animated Tile").m_MinSpeed = 1;
Resources.Load<AnimatedTile>("My Animated Tile").m_MaxSpeed = 1;

Isso funciona ao jogar no Editor Unity, mas não em uma versão real do jogo, onde parece que os Recursos não podem ser modificados.

Algo assim também parece não funcionar:

Vector3Int tilePosition = new Vector3Int(0,0,0);
AnimatedTile animatedTile = myGrid.GetTile<AnimatedTile>(tilePosition);

animatedTile.m_MinSpeed = 1;
animatedTile.m_MaxSpeed = 1;

GameSceneObjects.wallGrid.SetTile(tilePosition, animatedTile);

aparentemente não tendo efeito nem no Editor Unity nem na compilação.

Como posso modificar isso para que funcione na compilação do jogo, não apenas no Editor Unity?

c#
  • 1 respostas
  • 38 Views
Martin Hope
CapBul
Asked: 2025-04-11 03:46:20 +0800 CST

Consulta MySQL para recuperar uma estrutura hierárquica, limitando cada nível de comentários filhos a um máximo de 5 por pai

  • 6

Tenho uma tabela de comentários com id, parent_id, content, created_at e outros campos. Quero poder selecionar primeiro os comentários raiz (ou seja, comentários em que o parent_id é NULL) e limitá-los aos 5 mais recentes. Em seguida, para cada comentário raiz selecionado, quero limitar o número de comentários filhos de segundo nível a 5. E assim por diante para todos os níveis mais profundos. O problema que estou enfrentando é como limitar os comentários filhos em todos os níveis da recursão sem varrer a tabela inteira. Até agora, só consegui fazer isso para os comentários de nível superior usando uma solução alternativa. Como posso adicionar a essa consulta recursiva para que ela respeite a regra de 5 filhos por pai durante a recursão sem varrer a tabela inteira e filtrar depois?

O esquema da tabela e os dados de origem têm a seguinte aparência:

-- create
CREATE TABLE comments (
    id         INT NOT NULL PRIMARY KEY,
    user_id    BIGINT NOT NULL,
    post_id    BIGINT NOT NULL,
    parent_id  INT DEFAULT NULL,
    content    VARCHAR(10000) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,

    CONSTRAINT fk_comments_parent FOREIGN KEY (parent_id) 
      REFERENCES comments(id) ON DELETE CASCADE ON UPDATE CASCADE
);

-- Root Comments (Level 1)
INSERT INTO comments (id, user_id, post_id, parent_id, content, created_at) VALUES
(1, 101, 1, NULL, 'Root Comment 1', '2025-04-10 10:00:00'),
(2, 102, 1, NULL, 'Root Comment 2', '2025-04-10 10:05:00'),
(3, 103, 1, NULL, 'Root Comment 3', '2025-04-10 10:10:00'),
(4, 104, 1, NULL, 'Root Comment 4', '2025-04-10 10:15:00'),
(5, 105, 1, NULL, 'Root Comment 5', '2025-04-10 10:20:00'),
(18, 105, 1, NULL, 'Root Comment 6', '2025-04-11 10:20:00');

-- Second-level Comments (Level 2) for Root Comments 1, 2, and 3
INSERT INTO comments (id, user_id, post_id, parent_id, content, created_at) VALUES
(6, 106, 1, 1, 'Second-level Comment 1 (Child of Root 1)', '2025-04-10 10:25:00'),
(7, 107, 1, 1, 'Second-level Comment 2 (Child of Root 1)', '2025-04-10 10:30:00'),
(8, 108, 1, 2, 'Second-level Comment 3 (Child of Root 2)', '2025-04-10 10:35:00'),
(9, 109, 1, 3, 'Second-level Comment 4 (Child of Root 3)', '2025-04-10 10:40:00'),
(10, 110, 1, 3, 'Second-level Comment 5 (Child of Root 3)', '2025-04-10 10:45:00');

-- Third-level Comments (Level 3) for second-level comments
INSERT INTO comments (id, user_id, post_id, parent_id, content, created_at) VALUES
(11, 111, 1, 6, 'Third-level Comment 1 (Child of Second-level 1)', '2025-04-10 10:50:00'),
(12, 112, 1, 6, 'Third-level Comment 2 (Child of Second-level 1)', '2025-04-10 10:55:00'),
(13, 113, 1, 7, 'Third-level Comment 3 (Child of Second-level 2)', '2025-04-10 11:00:00'),
(14, 114, 1, 8, 'Third-level Comment 4 (Child of Second-level 3)', '2025-04-10 11:05:00'),
(15, 115, 1, 9, 'Third-level Comment 5 (Child of Second-level 4)', '2025-04-10 11:10:00');

-- Fourth-level Comments (Level 4) for third-level comments
INSERT INTO comments (id, user_id, post_id, parent_id, content, created_at) VALUES
(16, 116, 1, 11, 'Fourth-level Comment 1 (Child of Third-level 1)', '2025-04-10 11:15:00'),
(17, 117, 1, 12, 'Fourth-level Comment 2 (Child of Third-level 2)', '2025-04-10 11:20:00');

E a consulta que escrevi, que busca apenas os 5 comentários raiz mais recentes e todos os seus filhos:

WITH RECURSIVE comment_tree AS (
    -- Base case: Selecting the root comments
    SELECT id, user_id, parent_id, content, created_at, 1 AS level
    FROM comments
    WHERE post_id = 1 AND parent_id IS NULL
    AND id IN (SELECT * FROM (
        SELECT id FROM comments 
        WHERE post_id = 1 AND parent_id IS NULL
        ORDER BY created_at DESC
        LIMIT 5)temp_tab)
    
    UNION ALL

    -- Recursive case: Selecting child comments
    SELECT c.id, c.user_id, c.parent_id, c.content, c.created_at, ct.level + 1 AS level
    FROM comments c
    JOIN comment_tree ct ON c.parent_id = ct.id
    -- Limiting the recursion to some level
    WHERE ct.level < 4
)

SELECT * FROM comment_tree
ORDER BY created_at;

Tabela do resultado desejado (colunas irrelevantes foram omitidas, cada parent_id tem no máximo 5 filhos):

eu ia id_pai nível criado_em
1 NULO 1 2024-04-10 10:00:00
2 NULO 1 2024-04-10 09:58:00
3 NULO 1 2024-04-10 09:55:00
4 NULO 1 2024-04-10 09:54:00
5 NULO 1 2024-04-10 09:53:00
6 NULO 1 2024-04-10 09:52:00
11 1 2 2024-04-10 10:01:00
12 1 2 2024-04-10 10:00:30
13 1 2 2024-04-10 09:59:00
14 1 2 2024-04-10 09:58:30
15 1 2 2024-04-10 09:57:00
21 11 3 2024-04-10 10:02:00
22 11 3 2024-04-10 10:01:30
23 11 3 2024-04-10 10:01:15
24 11 3 2024-04-10 10:01:10
25 11 3 2024-04-10 10:01:05
31 12 3 2024-04-10 10:00:40
sql
  • 1 respostas
  • 55 Views
Martin Hope
Segern Jose Monterola
Asked: 2025-04-11 03:30:54 +0800 CST

A ação de criação do Rails Active Admin não consegue criar meu modelo Book, mas funciona para outros modelos

  • 6

Estou tentando criar um novo registro de livro pelo painel de administração ativo, mas ele não é criado ao clicar no botão "Criar". Quando clico em "Criar", há uma solicitação POST para /admin/books contendo os dados do formulário. Mas, em vez de retornar um 302 e redirecionar para a lista de livros, ele retorna um 200 e o que parece ser o formulário de atualização. Embora retorne um 200, quando vou ao console para verificar se o livro foi criado, ele não é criado. Adicionei manualmente uma ação "novo" e "criar" ao modelo e isso funciona. A ação de criação funciona bem para outros modelos e afeta apenas o meu modelo de livro.

Aqui está o código no meu arquivo admin/books.rb

ActiveAdmin.register Book do
  permit_params :title, :page_count, :book_type, :year_released, :price, :genre_id, :language_id, :author_id

  # Displays the drop down menus correctly as well as all other inputs in order of my choosing
  form do |show|
    show.inputs "Details" do
      show.input :language_id, as: :select, collection: Language.all.collect { |language|
      [ language.language_short, language.id ] }
      show.input :author_id, as: :select, collection: Author.all.collect { |author| [ author.full_name, author.age,
      author.gender_short, author.biography, author.id ] }
      show.input :title
      show.input :genre_id, as: :select, collection: Genre.all.collect { |genre| [ genre.genre, genre.id ] }
      show.input :book_type
      show.input :year_released
      show.input :price
    end

    show.actions
  end
end

Aqui está o meu modelo de livro

class Book < ApplicationRecord
  # Validates that all columns are not empty
  validates :title, :page_count, :book_type, :year_released, :price, presence: true
  # Validates that the title is unique
  validates :title, uniqueness: true
  # Associations between its parent tables and child table
  # has_and_belongs_to_many :genres
  belongs_to :language
  belongs_to :author
  has_many :purchases

  def self.ransackable_associations(auth_object = nil)
    [ "author", "genres", "language", "purchases" ]
  end

  def self.ransackable_attributes(auth_object = nil)
    [ "author_id", "book_type", "created_at", "genre_id", "id", "language_id", "page_count", "price", "title", "updated_at", "year_released" ]
  end
end

Quando uso o formulário de livro padrão em vez do meu formulário personalizado, o atributo genre_id não aparece e continua com o mesmo comportamento (falha ao criar o livro e retorna POST 200).

Estou usando o Ruby versão 3.4.1 e o Rails versão 8.0.2.

E estes são os logs do servidor ao criar um novo livro

Started POST "/admin/books" for 127.0.0.1 at 2025-04-10 14:45:29 -0500
Processing by Admin::BooksController#create as HTML
  Parameters: {"authenticity_token" => "[FILTERED]", "book" => {"language_id" => "3", "author_id" => "6", "title" => "Captain Underpants", "genre_id" => "8", "book_type" => "Physical", "year_released" => "1997", "price" => "9.99"}, "commit" => "Create Book"}
  AdminUser Load (0.2ms)  SELECT "admin_users".* FROM "admin_users" WHERE "admin_users"."id" = 3 ORDER BY "admin_users"."id" ASC LIMIT 1 /*action='create',application='ECommerce',controller='books'*/
  TRANSACTION (0.1ms)  BEGIN immediate TRANSACTION /*action='create',application='ECommerce',controller='books'*/
  Book Exists? (2.9ms)  SELECT 1 AS one FROM "books" WHERE "books"."title" = 'Captain Underpants' LIMIT 1 /*action='create',application='ECommerce',controller='books'*/
  Language Load (0.3ms)  SELECT "languages".* FROM "languages" WHERE "languages"."id" = 3 LIMIT 1 /*action='create',application='ECommerce',controller='books'*/
  Author Load (0.1ms)  SELECT "authors".* FROM "authors" WHERE "authors"."id" = 6 LIMIT 1 /*action='create',application='ECommerce',controller='books'*/
  TRANSACTION (0.1ms)  ROLLBACK TRANSACTION /*action='create',application='ECommerce',controller='books'*/
  Rendering /home/segern/.rbenv/versions/3.4.1/lib/ruby/gems/3.4.0/gems/activeadmin-3.3.0/app/views/active_admin/resource/new.html.arb
  Language Load (0.2ms)  SELECT "languages".* FROM "languages" /*action='create',application='ECommerce',controller='books'*/
  ↳ app/admin/books.rb:7:in 'Enumerable#collect'
  Author Load (0.7ms)  SELECT "authors".* FROM "authors" /*action='create',application='ECommerce',controller='books'*/
  ↳ app/admin/books.rb:9:in 'Enumerable#collect'
  Genre Load (0.3ms)  SELECT "genres".* FROM "genres" /*action='create',application='ECommerce',controller='books'*/
  ↳ app/admin/books.rb:12:in 'Enumerable#collect'
  Rendered /home/segern/.rbenv/versions/3.4.1/lib/ruby/gems/3.4.0/gems/activeadmin-3.3.0/app/views/active_admin/resource/new.html.arb (Duration: 57.9ms | GC: 1.0ms)
Completed 200 OK in 89ms (Views: 58.0ms | ActiveRecord: 4.5ms (7 queries, 0 cached) | GC: 1.7ms)


Started GET "/favicon.ico" for 127.0.0.1 at 2025-04-10 14:45:29 -0500

ActionController::RoutingError (No route matches [GET] "/favicon.ico"):
ruby-on-rails
  • 1 respostas
  • 18 Views
Martin Hope
Ralubrusto
Asked: 2025-04-11 03:24:58 +0800 CST

Duplicar e renomear colunas no DataFrame do Pandas

  • 6

Acho que isso deve ser bem simples, mas estou com dificuldade para encontrar uma maneira fácil de fazer isso.

Tenho um DataFrame do Pandas com as colunas de A a D e preciso copiar algumas delas para novas colunas. O truque é que não envolve apenas renomear, mas também preciso duplicar os valores para novas colunas.

Aqui está um exemplo da entrada:

import pandas as pd

df = pd.DataFrame({
    'A': [1,2,3], 
    'B':['2025-10-01', '2025-10-02', '2025-10-01'], 
    'C': ['2025-02-10', '2025-02-15', '2025-02-20'], 
    'D': [0, 5, 4],
    'values': [52.3, 60, 70.6]
})

mapping_dict = {
    'table_1': {
        'id': 'A',
        'dt_start': 'B',
        'dt_end': 'B',
    },
    'table_2': {
        'id': 'D',
        'dt_start': 'C',
        'dt_end': 'C',
    },
}

Gostaria de ter como saída para table_1um DataFrame o seguinte:

eu ia dt_start dt_end valores
1 2025-10-01 2025-10-01 52,3
2 2025-10-02 2025-10-02 60
3 2025-10-01 2025-10-01 80,6

E acho que é possível inferir a saída esperada para table_2.

Observe que a coluna values, que não está incluída na lógica de mapeamento, deve permanecer no dataframe.

Consegui fazer isso usando um loop for, mas sinto que essa deveria ser uma maneira natural de fazer isso diretamente no pandas sem precisar executar um loop manual no dicionário de mapeamento e depois remover as colunas extras.

Aqui está minha solução até agora:

table_name = 'table_1'

new_df = df.copy()
for new_col, old_col in mapping_dict[table_name].items():
    new_df[new_col] = df[old_col]

new_df = new_df.drop(mapping_dict[table_name].values(), axis='columns')

Qualquer ajuda ou sugestão será apreciada!

python
  • 1 respostas
  • 77 Views
Prev
Próximo

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Reformatar números, inserindo separadores em posições fixas

    • 6 respostas
  • Marko Smith

    Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não?

    • 2 respostas
  • Marko Smith

    Problema com extensão desinstalada automaticamente do VScode (tema Material)

    • 2 respostas
  • Marko Smith

    Vue 3: Erro na criação "Identificador esperado, mas encontrado 'import'" [duplicado]

    • 1 respostas
  • Marko Smith

    Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores?

    • 1 respostas
  • Marko Smith

    Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

    • 6 respostas
  • Marko Smith

    `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso?

    • 3 respostas
  • Marko Smith

    Um programa vazio que não faz nada em C++ precisa de um heap de 204 KB, mas não em C

    • 1 respostas
  • Marko Smith

    PowerBI atualmente quebrado com BigQuery: problema de driver Simba com atualização do Windows

    • 2 respostas
  • Marko Smith

    AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos

    • 1 respostas
  • Martin Hope
    Fantastic Mr Fox Somente o tipo copiável não é aceito na implementação std::vector do MSVC 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant Encontre o próximo dia da semana usando o cronógrafo 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor O inicializador de membro do construtor pode incluir a inicialização de outro membro? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul O C++20 mudou para permitir a conversão de `type(&)[N]` de matriz de limites conhecidos para `type(&)[]` de matriz de limites desconhecidos? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann Como/por que {2,3,10} e {x,3,10} com x=2 são ordenados de forma diferente? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller O ponto e vírgula agora é opcional em condicionais bash com [[ .. ]] na versão 5.2? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench Por que um traço duplo (--) faz com que esta cláusula MariaDB seja avaliada como verdadeira? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng Por que `dict(id=1, **{'id': 2})` às vezes gera `KeyError: 'id'` em vez de um TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos 2024-03-20 03:12:31 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve