gpt4 book ai didi

python - Pandas 在多级数据框上应用 map

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

我有一个方阵作为 pandas 中的数据框。它应该是对称的,几乎是对称的,除了我用 0 填充的一些缺失值。我想利用它应该是对称的这一事实来填充缺失值,方法是在 df.ix 上取绝对值的最大值[x,y] 和 df.ix[y,x]。即:

df = pd.DataFrame({'b': {'b': 1, 'a': 0,'c':-1}, 'a': {'b': 1, 'a': 1,'c':0},'c':{'c':1,'a':0,'b':0}})

>>> df
a b c
a 1 0 1
b 1 1 0
c 1 -1 1

应该变成:

>>> df
a b c
a 1 1 1
b 1 1 -1
c 1 -1 1

起初我想到了使用一个简单的 applymap 和一个类似这样的函数:

def maxSymmetric(element):
if abs(element) > df.T.ix[element.column,element.row]:
return element
else return df.T.ix[element.column,element.row]

但是似乎没有办法在 applymap 的函数中调用元素的索引(参见 related )。

然后我尝试制作原始矩阵及其转置的多级数据框:

    pd.concat([df,df.T],axis=0,keys=['o','t'])
a b c
o a 1 0 1
b 1 1 0
c 1 -1 1
t a 1 1 1
b 0 1 -1
c 1 0 1

现在我想使用与上述类似的函数为每个元素从“o”或“t”中提取正确的(非零,如果可用)元素。但是我对多索引不是很有经验,我不知道如何在这里使用 applymap,或者我是否应该使用其他东西。

建议?

最佳答案

我觉得你可以先把df转换成numpy array,使用numpy solution最后使用 constructor 创建 DataFrame:

a = df.values
print (pd.DataFrame(data=a + a.T - np.diag(a.diagonal()),
columns=df.columns,
index=df.index))

a b c
a 1 1 2
b 1 1 -1
c 2 -1 1

通过评论编辑:

print (df + df.T - df[df==df.T].fillna(0))
a b c
a 1.0 1.0 1.0
b 1.0 1.0 -1.0
c 1.0 -1.0 1.0

关于python - Pandas 在多级数据框上应用 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37954906/

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