Py学习  »  Python

Python Dataframe从行的每个列表中减去一个值

Mainland • 3 年前 • 1218 次点击  

我有一个数据框架,由列表作为元素组成。我想从每个列表中减去一个值,然后创建一个新列。 我的代码:

df = pd.DataFrame({'A':[[1,2],[4,5,6]]})
df
           A
0     [1, 2]
1  [4, 5, 6]

# lets substract 1 from each list
val = 1
df['A_new'] = df['A'].apply(lambda x:[a-b for a,b in zip(x[0],[val]*len(x[0]))],axis=1)

目前的解决方案:

IndexError: index 3 is out of bounds for axis 0 with size 2

预期解决方案:

df
           A      A_new
0     [1, 2]     [0, 1]
1  [4, 5, 6]  [3, 4, 5]
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/133405
 
1218 次点击  
文章 [ 4 ]  |  最新文章 3 年前
Abhyuday Vaish
Reply   •   1 楼
Abhyuday Vaish    3 年前

您可以将列表转换为 np.array 然后减去 val :

import numpy as np

df['A_new'] = df['A'].apply(lambda x: np.array(x) - val)

输出:

           A      A_new
0     [1, 2]     [0, 1]
1  [4, 5, 6]  [3, 4, 5]
Shubham Sharma
Reply   •   2 楼
Shubham Sharma    3 年前

简单的列表理解如何:

df['new'] = [[i - 1 for i in l] for l in df['A']]

           A        new
0     [1, 2]     [0, 1]
1  [4, 5, 6]  [3, 4, 5]
user2736738
Reply   •   3 楼
user2736738    3 年前
df['A_new'] = df['A'].apply(lambda x:[a-b for a,b in zip(x,[val]*len(x))])

你必须把名单交给 len 作用在这里 x 就是名单本身。所以索引它, x[0] 根据上下文返回一个错误的数字。这将产生以下输出:

           A      A_new
0     [1, 2]     [0, 1]
1  [4, 5, 6]  [3, 4, 5]
BENY
Reply   •   4 楼
BENY    3 年前

皈依 numpy array

df['A_new'] = df.A.map(np.array)-1
Out[455]: 
0       [0, 1]
1    [3, 4, 5]
Name: A, dtype: object