gpt4 book ai didi

Python Pandas : How To Set Columns as an Index?

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

我想知道我是否可能缺少一种简单的方法来提取一组列名称作为数据框中的索引。

以下是我使用当前(困惑)解决方案设置的示例代码:

df1 = pd.DataFrame({
'A' : ['a1', 'a1', 'a2', 'a3'],
'B' : ['b1', 'b2', 'b3', 'b4'],
'D1' : [1,0,0,0],
'D2' : [0,1,1,0],
'D3' : [0,0,1,1],
})

df1 = df1.set_index(['A','B'])
b = df1.unstack().unstack()
c = b.reset_index()
c.columns = ['D','B','A','Value']
d = c.set_index(['A','B','D'])
final1 = d.unstack()

df2 = pd.DataFrame({
'A' : ['a1', 'a1', 'a2', 'a3'],
'B' : ['b1', 'b2', 'b3', 'b4'],
'D1' : [1,0,0,0],
'D2' : [0,0,0,0],
'D3' : [0,0,0,1],
})

df2 = df2.set_index(['A','B'])
b = df2.unstack().unstack()
c = b.reset_index()
c.columns = ['D','B','A','Value']
d = c.set_index(['A','B','D'])
final2 = d.unstack()

result = (final1*final2).dropna()

因此,通过更多背景知识,我试图解决的实际问题如下:我有 N 个由 1 和 0 组成的数据帧(例如 df1、df2),我正在尝试找到一种方法,使用 Pandas 基于 3 维索引将它们相乘,以便找到它们的交集(即结果)。

为了做到这一点,我想为什么不将数据集转换为 Pandas 数据框,然后将索引设置为 3 维。然后如上所示,它应该只是一个简单的乘法工作,Pandas 会处理剩下的事情。

但是,数据采用 df1/df2 中所示的格式。因此,上面的代码突出了我将数据转换为具有 3 个索引的 Pandas 数据框的困惑尝试。因此,我再次想知道是否有更简单的方法将一组列名移动到索引中。

谢谢!

最佳答案

我认为您可以将所有框架放入列表中并减少。他们每次都会对齐;包括 fill_value=1 将在与 NaN 相乘时传播值(这就是我认为你想要的)。

In [39]: list_of_dfs = [df1,df2]

In [40]: reduce(lambda x,y: x.mul(y,fill_value=1), list_of_dfs[1:], list_of_dfs[0])
Out[40]:
D1 D2 D3
A B
a1 b1 1 0 0
b2 0 0 0
a2 b3 0 0 0
a3 b4 0 0 1

关于Python Pandas : How To Set Columns as an Index?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23766054/

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