Pandas Dataframe Apply - лямбда-функция добавляется в список - PullRequest
0 голосов
/ 23 октября 2019

У меня есть список, содержащийся в столбце кадра данных панд. И я хочу добавить значение в столбце «price_label» к списку.

В настоящее время я использую функцию, которую я сделал, чтобы сделать это, но это лучший способ? Я чувствую, что я что-то здесь упускаю?

Мой метод работает, но это не красиво. Любые предложения.

Список перед:

+---+--------------+-----------+-----------------------------------------+-------+------------------------------+-------------+
|   | prodref      | prodcateg | webproddesc                             | price | categories                   | price_label |
+---+--------------+-----------+-----------------------------------------+-------+------------------------------+-------------+
| 0 | 1004 10-14MM | STR4      | Gold Plated Bracelet 1004 - 10-14MM     | 5.98  | [Gold, Plated, Bracelet]     | 1           |
| 1 | 1004 16-22MM | STR4      | Gold Plated Bracelet 1004 - 16-22MM     | 5.98  | [Gold, Plated, Bracelet]     | 1           |
| 2 | 1007 10-14MM | STR4      | Bi-Colour Bracelet 1007 - 10-14MM       | 5.98  | [BiColour, Bracelet]         | 1           |
| 3 | 1007 16-22MM | STR4      | Bi-Colour Bracelet 1007 - 16-22MM       | 5.98  | [BiColour, Bracelet]         | 1           |
| 4 | 1010 10-14MM | STR4      | Stainless Steel Bracelet 1010 - 10-14MM | 5.98  | [Stainless, Steel, Bracelet] | 1           |
| 5 | 1010 16-22MM | STR4      | Stainless Steel Bracelet 1010 - 16-22MM | 5.98  | [Stainless, Steel, Bracelet] | 1           |
| 6 | W108/22      | STR1      | Grey Calf Watch Strap (S) - W108/22     | 4.18  | [Grey, Calf, Watch]          | 1           |
| 7 | W404/14      | STR1      | White Lizard Grain Strap (S) - W404/14  | 5.98  | [White, Lizard, Grain]       | 1           |
| 8 | W404/18      | STR1      | White Lizard Grain Strap (S) - W404/18  | 5.98  | [White, Lizard, Grain]       | 1           |
+---+--------------+-----------+-----------------------------------------+-------+------------------------------+-------------+

Функция:

def appendPrice(vert):
    cat_list = vert["categories"]
    cat_list.append(vert["price_label"])
    return cat_list

test["categories"] = test.apply(lambda x:appendPrice(x),axis=1)  

Выход

+---+--------------+-----------+-----------------------------------------+-------+---------------------------------+-------------+
|   | prodref      | prodcateg | webproddesc                             | price | categories                      | price_label |
+---+--------------+-----------+-----------------------------------------+-------+---------------------------------+-------------+
| 0 | 1004 10-14MM | STR4      | Gold Plated Bracelet 1004 - 10-14MM     | 5.98  | [Gold, Plated, Bracelet, 1]     | 1           |
| 1 | 1004 16-22MM | STR4      | Gold Plated Bracelet 1004 - 16-22MM     | 5.98  | [Gold, Plated, Bracelet, 1]     | 1           |
| 2 | 1007 10-14MM | STR4      | Bi-Colour Bracelet 1007 - 10-14MM       | 5.98  | [BiColour, Bracelet, 1]         | 1           |
| 3 | 1007 16-22MM | STR4      | Bi-Colour Bracelet 1007 - 16-22MM       | 5.98  | [BiColour, Bracelet, 1]         | 1           |
| 4 | 1010 10-14MM | STR4      | Stainless Steel Bracelet 1010 - 10-14MM | 5.98  | [Stainless, Steel, Bracelet, 1] | 1           |
| 5 | 1010 16-22MM | STR4      | Stainless Steel Bracelet 1010 - 16-22MM | 5.98  | [Stainless, Steel, Bracelet, 1] | 1           |
| 6 | W108/22      | STR1      | Grey Calf Watch Strap (S) - W108/22     | 4.18  | [Grey, Calf, Watch, 1]          | 1           |
| 7 | W404/14      | STR1      | White Lizard Grain Strap (S) - W404/14  | 5.98  | [White, Lizard, Grain, 1]       | 1           |
| 8 | W404/18      | STR1      | White Lizard Grain Strap (S) - W404/18  | 5.98  | [White, Lizard, Grain, 1]       | 1           |
| 9 | W409/14      | STR1      | Pink Lizard Grain Strap (S) - W409/14   | 5.98  | [Pink, Lizard, Grain, 1]        | 1           |
+---+--------------+-----------+-----------------------------------------+-------+---------------------------------+-------------+

Ответы [ 3 ]

2 голосов
/ 23 октября 2019

Как указывал @ALollz, использование списка внутри Series или DataFrame редко используется.

Тем не менее, если вы хотите сохранить свой шаблон на данный момент, вы могли бы сбросить appendPrice в целом:

test["categories"] = test.apply(lambda x: x.categories + [x.price_label],axis=1) 

В противном случае вы могли бы поделиться большим цветом на том, что именно вы пытаетесь достичьс этим.

1 голос
/ 23 октября 2019

Эта строка кода сделает то, что вы просили. Это добавит значение из столбца price_label в конец каждой строки категорий. Эта операция более эффективна, чем df.apply (), для больших данных.

list(map(lambda k: df['categories'][k].append(df['price_label'][k]),df.index))
1 голос
/ 23 октября 2019

Если предположить

df["categories"]
0        [Gold, Plated, Bracelet]
1        [Gold, Plated, Bracelet]
2            [BiColour, Bracelet]
3            [BiColour, Bracelet]
4    [Stainless, Steel, Bracelet]
5    [Stainless, Steel, Bracelet]
6             [Grey, Calf, Watch]
7          [White, Lizard, Grain]
8          [White, Lizard, Grain]
Name: categories, dtype: object

и df['price_label'] как int, будет сделано следующее:

df.apply(lambda row: row["categories"] + list(str(row["price_label"])), axis=1)
0        [Gold, Plated, Bracelet, 1]
1        [Gold, Plated, Bracelet, 1]
2            [BiColour, Bracelet, 1]
3            [BiColour, Bracelet, 1]
4    [Stainless, Steel, Bracelet, 1]
5    [Stainless, Steel, Bracelet, 1]
6             [Grey, Calf, Watch, 1]
7          [White, Lizard, Grain, 1]
8          [White, Lizard, Grain, 1]
dtype: object
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...