gpt4 book ai didi

python - 如何将分层索引的 Pandas DataFrame 的一行分配给另一行?

转载 作者:太空宇宙 更新时间:2023-11-03 18:23:18 25 4
gpt4 key购买 nike

我正在尝试将分层索引的 Pandas DataFrame 的一行分配给 DataFrame 的另一行。以下是一个最小的示例。

import numpy as np    
import pandas as pd

columns = pd.MultiIndex.from_tuples([('a', 0), ('a', 1), ('b', 0), ('b', 1)])
data = pd.DataFrame(np.random.randn(3, 4), columns=columns)

print(data)
data.loc[0, 'a'] = data.loc[1, 'b']
print(data)

这会用 NaN 填充第 0 行,而不是第 1 行中的值。我注意到我可以通过在赋值之前转换为 ndarray 来绕过它:

data.loc[0, 'a'] = np.array(data.loc[1, 'b'])

这种行为大概是有原因的,并且有一种惯用的分配方式?

编辑:在杰夫的回答让我意识到我过度简化了问题后修改了问题。

最佳答案

In [38]: data = pd.DataFrame(np.random.randn(3, 2), columns=columns)

In [39]: data
Out[39]:
a
0 1
0 1.657540 -1.086500
1 0.700830 1.688279
2 -0.912225 -0.199431

In [40]: data.loc[0,'a']
Out[40]:
0 1.65754
1 -1.08650
Name: 0, dtype: float64

In [41]: data.loc[1,'a']
Out[41]:
0 0.700830
1 1.688279
Name: 1, dtype: float64

在您的示例中,请注意分配元素的索引是 [0,1];这些与 ('a',0),('a',1) 列不匹配。因此,您最终会有效地重新索引不存在的元素,因此您会得到nan

一般来说,最好让 pandas '找出'rhs 对齐(就像你在这里所做的那样,掩盖 lhs)。

In [42]: data.loc[0,'a'] = data.loc[1,:]

In [43]: data
Out[43]:
a
0 1
0 0.700830 1.688279
1 0.700830 1.688279
2 -0.912225 -0.199431

你也可以这样做

data.loc[0] = data.loc[1]

这是另一种方法:

In [96]: data = pd.DataFrame(np.arange(12).reshape(3,4), columns=pd.MultiIndex.from_product([['a','b'],[0,1]]))

In [97]: data
Out[97]:
a b
0 1 0 1
0 0 1 2 3
1 4 5 6 7
2 8 9 10 11

In [98]: data.loc[0,'a'] = data.loc[1,'b'].values

In [99]: data
Out[99]:
a b
0 1 0 1
0 6 7 2 3
1 4 5 6 7
2 8 9 10 11

Pandas 总是会对齐数据,这就是为什么这不能自然地工作。你故意不对齐。

关于python - 如何将分层索引的 Pandas DataFrame 的一行分配给另一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23686522/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com