提问人:Olga 提问时间:9/9/2023 更新时间:9/9/2023 访问量:45
Pandas 在新列计算中使用索引
Pandas use index in new column calculation
问:
我有一个数据帧,如下所示:
df = pd.DataFrame(data={'A', 'B', 'C'}, columns = ['Letter'])
索引自动设置为 [0,1,2]
然后,我想添加一个新列,该列将从数据帧的长度中提取索引数值:
df['Calc'] = len(df) - df.index
它给了我一个错误: ValueError:值 (0) 的长度与索引 (3) 的长度不匹配
但是,如果我在创建 DataFrame 时自己添加索引,如下所示:
df = pd.DataFrame(data={'A', 'B', 'C'}, columns = ['Letter'], index = [0,1,2])
df['Calc'] = len(df) - df.index
它运行良好,并添加了新列:
信 | 计算器 | |
---|---|---|
0 | 一个 | 3 |
1 | B | 2 |
2 | C | 1 |
我正在处理更大的数据集和更复杂的计算,但我无法理解这种行为背后的逻辑。在我的另一个例子中,pandas 会毫无错误地将新列添加到 DataFrame 中,但是一旦我reset_index(),它就不起作用。
你能解释一下这种行为吗?
答:
1赞
Jesse Sealand
9/9/2023
#1
只需添加到索引中,这会将 RangeIndex 转换为值列表。.values
import pandas as pd
df = pd.DataFrame(data=['A', 'B', 'C'], columns=['Letter'])
df['Calc'] = len(df) - df.index.values
Letter Calc
0 A 3
1 B 2
2 C 1
评论
df.index
RangeIndex
Index
print(df.index)
['A', 'B', 'C']
)len(df) - df.index
RangeIndex(start=3, stop=0, step=1)
step