![](/img/trans.png)
[英]Pandas: Add series to dataframe as a column (same index, different length)
[英]Pandas DataFrame column (Series) has different index than the Dataframe?
考慮這個小腳本:
import pandas as pd
aa = pd.DataFrame({'a': [1,2,3]})
bb = aa.a
bb.index = bb.index + 1
aa['b'] = bb
print(aa)
print(aa.a - aa.b)
output 是:
a b
0 1 NaN
1 2 1.0
2 3 2.0
0 NaN
1 0.0
2 0.0
3 NaN
雖然我期待aa.a - aa.b
是
0 NaN
1 1.0
2 1.0
這怎么可能? 是 Pandas 錯誤嗎?
aa = pd.DataFrame({'a': [1,2,3]})
bb = aa.a
bb.index = bb.index + 1
aa['b'] = bb
aa.reset_index(drop=True) # add this
您的索引不匹配。
當您執行aa.b - aa.a
時,您將減去具有相同長度但索引不同的 2 pandas.Series
:
aa.a
1 1
2 2
3 3
Name: a, dtype: int64
然而:
aa.b
0 NaN
1 1.0
2 2.0
Name: b, dtype: float64
當你這樣做時:
print(aa.b - aa.a)
您正在打印這些 2 pandas.Series
的合並(無論操作類型:加法還是減法),這就是索引[0,1,2]
和[1,2,3]
將合並到新索引的原因0 到 3:[0,1,2,3]。
例如,如果您將bb.index
移 2 而不是 1:
bb.index = bb.index + 2
到那時,您的新pandas.Series
中將有 5 行,而不是 4 行。依此類推。
bb.index = bb.index + 2
aa['b'] = bb
print(aa.a - aa.b)
0 NaN
1 NaN
2 0.0
3 NaN
4 NaN
dtype: float64
使用此代碼獲得您期望的結果:
aa = pd.DataFrame({'a': [1,2,3]})
bb = aa.a.copy()
bb.index = bb.index + 1
aa['b'] = bb
print(aa)
print(aa.a - aa.b)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.