我正在尝试实现一个公式,以使用现有列在Dataframe中创建新列,但该列是从0到其他某个列中存在的数字的总和。
我正在尝试这样的事情:
dataset['B']=sum([1/i for i in range(dataset['A'])])
我知道这样的事情会起作用 数据集['B'] = sum([1 / i代表范围(10)中的i]
但是我想基于不同的列使这10个动态。
我不断收到此错误。
TypeError:“系列”对象不能解释为整数
答案 0 :(得分:0)
首先,我应该承认我无法完全理解你的问题。但是,据我了解,您想遍历DataFrame的行并通过对该值进行一些操作来创建一个新列。 是这样,那么我建议您following link
关于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
,而且效率不高。