переставить значения строк в csv с помощью pandas python - PullRequest
0 голосов
/ 23 октября 2018

Я работаю с пандами и у меня есть CSV-файл, который выглядит следующим образом

  ID                Name        Store      Price           
Melbourne           
    1               aaaa        bbbb        570
    2               cccc        dddd        236
    3               eeee        ffff        230
Sydney
    1               hhhh        gggg        2300
    2               kkkk        llll        266

Я хочу это в этой форме

City            ID               Name        Store       Price      
Melbourne        1               aaaa        bbbb        570
Melbourne        2               cccc        dddd        236
Melbourne        3               eeee        ffff        230
Sydney           1               hhhh        gggg        23
Sydney           2               kkkk        llll        266

Я думаю, что это
1. добавление нового столбца

  ID        New               Name        Store      Price           
Melbourne   NaN  
    1       NaN               aaaa        bbbb        570
    2       NaN               cccc        dddd        236
    3       NaN               eeee        ffff        230
Sydney 
    1       NaN               hhhh        gggg        2300
    2       NaN               kkkk        llll        266

затем измените индекс на ID.Таким образом, это будет выглядеть так:

  ID       New      Name        Store      Price           
 Melbourne NaN  
 1         NaN      aaaa        bbbb        570
 2         NaN      cccc        dddd        236
 3         NaN      eeee        ffff        230
 Sydney    NaN
 1         NaN      hhhh        gggg        2300
 2         NaN      kkkk        llll        266

, а затем что-то вроде этого

  ID         New              Name        Store      Price           
 Melbourne   NaN  
 Melbourne    1               aaaa        bbbb        570
 Melbourne    2               cccc        dddd        236
 Melbourne    3               eeee        ffff        230
 Sydney       NaN
 Sydney       1               hhhh        gggg        2300
 Sydney       2               kkkk        llll        266

Наконец, измените имя столбца и удалите строкибез значений

City            ID              Name        Store      Price           
Melbourne       1               aaaa        bbbb        570
Melbourne       2               cccc        dddd        236
Melbourne       3               eeee        ffff        230
Sydney          1               hhhh        gggg        2300
Sydney          2               kkkk        llll        266

Я не уверен, может ли это быть реализовано или нет.Пожалуйста, дайте мне некоторое представление о том, как я могу это реализовать.

1 Ответ

0 голосов
/ 23 октября 2018

Есть несколько способов сделать это, и ниже приведены некоторые идеи о том, как реализовать предложенный метод.

Шаг 1:

Проверьте, содержит ли строка толькобуквенные символы с использованием str.isalpha() метода:

df["column"].apply(lambda x: x if x.isalpha() else None)

Выше будет возвращено Series с числовыми значениями в столбце ID как None.Вы можете сохранить это в новом столбце.

Это решение предполагает, что каждый x является строкой.


Если вы точно не знаете, что все числа в вашемСтолбец - это строки. Вы можете создать список городов:

my_cities = ['Melbourne', 'Sydney']

Затем проверьте, является ли значение в вашем столбце городом, и сохраните его в логическом Series:

is_city = df['column'].isin(my_cities)

Примените Series в качестве маски и замените значения на None:

df.loc[~is_city, 'column'] = None

(обратите внимание, что ~ означает «не», поэтому будут возвращаться строки, в которых значение «не является городом»).

Шаг 2:

Заполните новый столбец, используя метод ffill:

df["new_column"].fillna(method="ffill")

ffill в основном выполняет шаг 3 в вашемвопрос.Вы можете прочитать об этом здесь .

Шаг 3:

Наконец, удалите все строки, содержащие хотя бы одну None:

df.dropna()
...