【问题标题】:Appending to a dataframe cell with pandas?用熊猫附加到数据框单元格?
【发布时间】:2018-05-25 21:48:38
【问题描述】:

我正在编写一个代码,该代码根据某些列中的数据为人们分配标签。我正在使用熊猫数据框。用一个初始值填充标签列没有问题,但如果一个人应该有多个标签,我不知道如何附加到初始值。

数据框将每个单元格视为一个字符串,我很确定我希望它是一个列表。

df["Shopify Tags"] = ''
df.set_index(ID, inplace=True)

i = 0

for index, row in df.iterrows():

     if "Medical" in df.iloc[i,2]:

          df.iloc[i,4] = "#Medical"


     if "40" in df.iloc[i,2]:

         df.iloc[i,4].append('#Discount40')


 i+=1

我希望 Shopify 标签列在每一行中最终看起来像 #Medical, #Discount40, #OtherTags

这是我关于 SO 的第一个问题 :)

【问题讨论】:

  • 你能添加一些示例数据吗

标签: python pandas dataframe


【解决方案1】:

你的问题有两点值得注意:

  1. 在数据框中保存列表效率低下,不推荐使用。这是因为它们是通过指针而不是在连续的内存块中存储的。这意味着无法进行矢量化计算。
  2. 您应该只在万不得已的情况下迭代数据框中的行。 Pandas 专注于矢量化计算。即使对于非向量化操作,也有一些方法可以避免显式 for 循环。

注意到这些点后,以下是一种解决方案。

# example dataframe
df = pd.DataFrame({'col1': 1,
                   'col2': ['Medical 1234', 'Medical 40 Something',
                            '40 something', 'Nothing'],
                   'col3': 3})

# define function which creates a list from a dictionary mapping
def lister(x):
    mapping = {'Medical': '#Medical', '40': '#Discount40'}
    return [v for k, v in mapping.items() if k in x]

# apply function to series
df['col4'] = df['col2'].apply(lister)

print(df)

   col1                  col2  col3                     col4
0     1          Medical 1234     3               [#Medical]
1     1  Medical 40 Something     3  [#Medical, #Discount40]
2     1          40 something     3            [#Discount40]
3     1               Nothing     3        

【讨论】:

    猜你喜欢
    • 2020-09-26
    • 2022-01-12
    • 2019-08-05
    • 2018-02-08
    • 2017-06-13
    • 2014-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多