如何在for循环中使用dataframe列

时间:2019-07-02 07:54:14

标签: python-3.x dataframe

我正在尝试实现一个公式,以使用现有列在Dataframe中创建新列,但该列是从0到其他某个列中存在的数字的总和。

我正在尝试这样的事情:

dataset['B']=sum([1/i for i in range(dataset['A'])])

我知道这样的事情会起作用 数据集['B'] = sum([1 / i代表范围(10)中的i]

但是我想基于不同的列使这10个动态。

我不断收到此错误。

TypeError:“系列”对象不能解释为整数

2 个答案:

答案 0 :(得分:0)

  1. 首先,我应该承认我无法完全理解你的问题。但是,据我了解,您想遍历DataFrame的行并通过对该值进行一些操作来创建一个新列。 是这样,那么我建议您following link

  2. 关于TypeError: 'Series' object cannot be interpreted as an integer: 初始化签名range()采用整数作为输入。即[i for i in range(10)]应该给您[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]。但是,如果value中的dataset['A']之一是float或不是integer,则可能会导致您遇到错误。此外,如果您注意到,第一个值是零,因此1/i应该导致不同的错误。结果,您可能必须将代码重写为[1 / i for i in range(1,row_value_of_dataset ['A'])]

如果您能举例说明DataFrame的外观以及所需的输出,将不胜感激。然后也许更容易发布解决方案。

BTW忘记发布我从您的问题中了解的信息:

#assume the data:
>>>import pandas as pd
>>>data = pd.DataFrame({'A': (1, 2, 3, 4)})
#the data
>>>data
  A
0  1
1  2
2  3
3  4
#doing operation on each of the rows
>>>data['B']=data.apply(lambda row: sum([1/i for i  in range(1, row.A)] ), axis=1)
# Column B is the newly added data
>>>data
   A         B
0  1  0.000000
1  2  1.000000
2  3  1.500000
3  4  1.833333

答案 1 :(得分:0)

也许显式地使用cumsum甚至是apply

无论如何,尝试将数组/列表项直接移动到数据框中并似乎将其视为字典。试试这样的东西,我还没测试过,

array_x = [x, 1/x for x in dataset.values.tolist()] # or `dataset.A.tolist()`
df = pd.DataFrame(data=(np.asarray(array_x)))
df.columns = [A, B]

这里的想法是将系列分解成一个列表,然后将列表输入到数据框中。可以明确地做到这一点,而无需进行Series->list->dataframe,而且效率不高。