簡體   English   中英

通過apply將靜態列表添加到新的Pandas Dataframe列

[英]Add a static list to a new Pandas Dataframe column via apply

我有一個復雜的函數,為Pandas dataframe每一行生成一個list 我想將該list設為名為mylist的新列中每行的值。

Pandas執行此操作的能力似乎取決於起始數據幀中的列數。

import pandas as pd

df = pd.DataFrame(data=[['A', 'D'],
                        ['B', 'E'],
                        ['C', 'F']],
                  columns=['col1', 'col2'])

df1 = pd.DataFrame(data=[['A', 'D', 'G'],
                        ['B', 'E', 'H'],
                        ['C', 'F', 'I']],
                  columns=['col1', 'col2', 'col3'])

def add_list(row):
    return [1,3, 3]

df['mylist'] = df.apply(add_list, axis=1)
print df

收益率:

  col1 col2       list
0    A    D  [1, 3, 3]
1    B    E  [1, 3, 3]
2    C    F  [1, 3, 3]

此附加代碼產生ValueError: Wrong number of items passed 3, placement implies 1 為什么起始dataframe的列數會產生影響?

df1['mylist'] = df1.apply(add_list, axis=1)
print df1

如果我將函數更改為以下(添加一個元素),則沒有錯誤:

def add_list(row):
    return [1,3, 3, 4]

預期產量:

  col1 col2  col3      list
0    A    D    G   [1, 3, 3]
1    B    E    H   [1, 3, 3]
2    C    F    I   [1, 3, 3]

這是奇怪的行為。 一個解決方案似乎是返回一個元組而不是一個列表。

def add_list(row):
    return (1, 3, 3)

df1['mylist'] = df1.apply(add_list, axis=1).apply(list)

在最后一行中,您會注意到元組在數據幀中轉換為列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM