изменить долю столбца в кадре данных на основе другой информации в Pandas - PullRequest
3 голосов
/ 12 марта 2019

У меня есть этот DataFrame

Person      Salary 
John         350
Peter        543
Susan        517
Carl         448

И у меня есть этот другой фрейм данных с изменениями, которые я должен внести в первый

 Attribute    Change
  Person         3
  Salary         2

Значение «Изменить» должно относиться к изменению суммы, отображаемой другой буквой, например «x». Результат должен выглядеть так:

   Person      Salary 
    Jxxx         3xx
    Pexxx        5xx
    Suxxx        5xx
    Cxxx         4xx

Как я мог это сделать?

Ответы [ 2 ]

1 голос
/ 12 марта 2019

Краткий и элегантный ответ состоит в том, чтобы сначала создать отображение из вашего mapping_df, а затем применить функцию, следующую за этим отображением, в вашем target_df.

Вы можете получить карту из вашего mapping_df с transpose

>>> mapping_df.transpose().to_dict()
{1: {'Attribute': 'Person', 'Change': '3'},
 2: {'Attribute': 'Salary', 'Change': '2'}}

А затем просто примените его к вашему target_dataframe, используя map

cleaned = pd.DataFrame()

for mapping in list(mapping_df.transpose().to_dict().values()):
    cleaned[mapping['Attribute']] = target_df[mapping['Attribute']].map(
        lambda s: s[: - int(mapping['Change']) ]+ int(mapping['Change']) *'x')

Вы получите ожидаемый результат

 >>> cleaned
    Person  Salary
1   Jxxx    3xx
2   Pexxx   5xx
3   Suxxx   5xx
4   Cxxx    4xx
1 голос
/ 12 марта 2019

Данные:

import pandas as pd

df = pd.DataFrame({'Person':['John', 'Peter', 'Susan','Carl'],
'Salary':[350,543,517,448]})

change_df = pd.DataFrame({'Attribute':['Person', 'Salary'],
'Change':['3','2']})

Решение:

for col in df.columns:
    k = int(change_df[change_df.Attribute == col].Change)
    df[col] = df[col].apply(lambda x: str(x)[:len(str(x))-k]+k*'x')

Результат:

  Person Salary
0   Jxxx    3xx
1  Pexxx    5xx
2  Suxxx    5xx
3   Cxxx    4xx
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...