gpt4 book ai didi

python - pandas 数据帧行的两两相等

转载 作者:行者123 更新时间:2023-12-01 09:13:45 26 4
gpt4 key购买 nike

我有一个包含许多行的数据框,为了进行说明,我将使用以下示例:

df = pd.DataFrame([[2,1,3,3],[2,3,3,4],[4,1,3,2]],columns=['A','B','C','D'])

结果:

   A  B  C  D
0 2 1 3 3
1 2 3 3 4
2 4 1 3 2

我想得到一个新的数据帧,其中包含原始数据帧行之间的成对相等结果。我期望得到以下结果:

   A  B  C  D
0 1 0 1 0
1 0 1 1 0
2 0 0 1 0

如:索引 0- 是第 0 行与第 1 行,索引 1- 是第 0 行与第 2 行,索引 2- 是第 1 行与第 2 行

实现这一点的一个简单方法是:

new_df = pd.DataFrame()
for i in range(0, len(df)-1):
for j in range(i+1, len(df)):
new_df = new_df.append(df.iloc[i,:] == df.iloc[j,:], ignore_index=True)

有什么有效的方法来实现这个操作吗?

最佳答案

这将做你想要的:

import pandas as pd
from itertools import combinations

df = pd.DataFrame([[2,1,3,3],[2,3,3,4],[4,1,3,2]],columns=['A','B','C','D'])

combos = list(combinations(df.index, 2))

newData = {'{} v {}'.format(*combo): (df.iloc[combo[0]] == df.iloc[combo[1]]).astype(int).to_dict() for combo in combos}

pd.DataFrame.from_dict(newData, orient='index')

# A C B D
#0 v 1 1 1 0 0
#0 v 2 0 1 1 0
#1 v 2 0 1 0 0

因此它使用 2 中配对的索引值的唯一组合 - 然后根据这些条件构建行。

如果您希望重用此数据,请使用以下内容,因为它使 df 更易于查询:

newData = {combo: (df.iloc[combo[0]] == df.iloc[combo[1]]).astype(int).to_dict() for combo in combos}

pd.DataFrame.from_dict(newData, orient='index')
# A C B D
#0 1 1 1 0 0
# 2 0 1 1 0
#1 2 0 1 0 0

要根据您最新的请求获取结果,请使用:

newData = [(df.iloc[combo[0]] == df.iloc[combo[1]]).astype(int).to_dict() for combo in combos]

pd.DataFrame(newData)
# A B C D
#0 1 0 1 0
#1 0 1 1 0
#2 0 0 1 0

关于python - pandas 数据帧行的两两相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51420269/

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