【问题标题】:Apply list over Pandas dataframe在 Pandas 数据框上应用列表
【发布时间】:2018-12-20 08:59:42
【问题描述】:

我需要按列将列表应用于熊猫数据框。要执行的操作是字符串连接。更具体:

我的输入:

df = pd.DataFrame([['a', 'b', 'c'], ['d', 'e', 'f']], columns=['Col1', 'Col2', 'Col3'])
lt = ['Prod1', 'Prod2', 'Prod3']

导致:

>>>df
Col1 Col2 Col3
0    a    b    c
1    d    e    f

>>>lt
['Prod1', 'Prod2', 'Prod3']

此外,lt 的长度总是等于 df 的列数。

我想要的是这种数据框:

res = pd.DataFrame([['Prod1a', 'Prod2b', 'Prod3c'], ['Prod1d', 'Prod2e', 'Prod3f']],
               columns=['Col1', 'Col2', 'Col3'])

给出:

>>>res
Col1    Col2    Col3
0  Prod1a  Prod2b  Prod3c
1  Prod1d  Prod2e  Prod3f

到目前为止,我已经能够解决循环遍历行和列的问题,但我不会放弃有更优雅的方法来解决它的想法(也许像 apply 之类的东西。

有人有建议吗?谢谢!

【问题讨论】:

  • 你试过res = lt + df吗?

标签: python pandas list string-concatenation


【解决方案1】:

您可以执行广播字符串连接:

lt + df

     Col1    Col2    Col3
0  Prod1a  Prod2b  Prod3c
1  Prod1d  Prod2e  Prod3f

你也可以使用numpy的np.char.add函数。

df[:] = np.char.add(lt, df.values.astype(str))
df    
     Col1    Col2    Col3
0  Prod1a  Prod2b  Prod3c
1  Prod1d  Prod2e  Prod3f

第三,还有列表理解选项。

df[:] = [[i + v for i, v in zip(lt, V)] for V in df.values.tolist()]
df

     Col1    Col2    Col3
0  Prod1a  Prod2b  Prod3c
1  Prod1d  Prod2e  Prod3f

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-05
    • 2018-03-13
    • 2018-08-04
    • 2015-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多