2 回答

TA貢獻1804條經(jīng)驗 獲得超3個贊
我嘗試測試如何在鏈式賦值中重寫值與 .loc 參考上面@Quang Hoang 共享的 pandas 文檔鏈接。
這是我試過的:
dfmi = pd.DataFrame([list('abcd'),
list('efgh'),
list('ijkl'),
list('mnop')],
columns=pd.MultiIndex.from_product([['one', 'two'],
['first', 'second']]))
df1 = dfmi['one']['second']
df2 = dfmi.loc[:, ('one', 'second')]
df1 和 df2 的輸出:
0 b
1 f
2 j
3 n
迭代 1:
value = ['z', 'x', 'c', 'v']
dfmi['one']['second'] = value
輸出 df1:
0 z
1 x
2 c
3 v
迭代 2:
value = ['z', 'x', 'c', 'v']
dfmi.loc[:, ('one', 'second')] = value
輸出 df2:
0 z
1 x
2 c
3 v
在這兩種情況下,新集合的分配都會改變值。
文件說:
引用 1:“方法 2 (.loc) 比方法 1 (chained []) 更受歡迎”
引用 2:'在簡單情況之外,很難預(yù)測“ getitem ”(由鏈式選項使用)是否會返回視圖或副本(這取決于數(shù)組的內(nèi)存布局,pandas 對此不做任何保證),因此,“ setitem ”(由 .loc 使用)是否會修改 dfmi 或隨后立即被丟棄的臨時對象。
我無法理解上面的解釋。如果 dfmi 中的值可以改變(在我的情況下)并且可能不會改變(就像在 Benoit 的情況下)那么通過哪種方式獲得結(jié)果?不確定我是否遺漏了一點。尋求幫助

TA貢獻1816條經(jīng)驗 獲得超4個贊
切片沒有反映您在原始數(shù)據(jù)框中所做的更改的原因是 b/c 您首先創(chuàng)建了切片。
創(chuàng)建切片時,您創(chuàng)建了數(shù)據(jù)切片的“副本”。您沒有直接將兩者聯(lián)系起來。
這里的簡短回答是,您有兩個選擇 1) 首先更改原始 df,然后創(chuàng)建一個切片 2) 不切片,只需使用 .loc 或 iloc 引用原始 df 進行操作
添加回答
舉報