【问题标题】:pandas compare 1 row value with every other row value and create a matrix熊猫将 1 行值与其他行值进行比较并创建一个矩阵
【发布时间】:2021-08-02 18:03:30
【问题描述】:

DF在手

我要执行的步骤:

  1. 将 A001 数据与 A002、A003、...A00N 进行比较
  2. 对于每个匹配的值,将计数器加 1
  3. 如果不适用则不要增加计数
  4. 对所有其他行重复 A002 行
  5. 使用具有匹配值总数的索引创建矩阵 DF 创建:

data = {'name':['A001', 'A002', 'A003', 'A004','A005','A006','A007','A008'], 'Q1':[2,1,1,1,2,1,1,5], 'Q2':[4,4,4,2,4,2,5,4] 'Q3':[2,2,3,2,2,3,2,2] 'Q4':[5,3,5,2,3,2,4,5] 'Q5':[2,2,3,2,2,2,2,2]}

df = pd.DataFrame(数据)

df.at[7, 'Q3'] = 无

期望的输出

提前致谢。

【问题讨论】:

  • 可以使用pd.DataFrame(....) 将您的数据作为代码吗?
  • @Carmoreno 我刚刚添加了数据,很抱歉没有将它们包括在开头

标签: python-3.x pandas matrix


【解决方案1】:

IIUC,

df = pd.DataFrame({'name':['A001', 'A002', 'A003', 'A004','A005','A006','A007','A008'], 
                   'Q1':[2,1,1,1,2,1,1,5], 
                   'Q2':[4,4,4,2,4,2,5,4], 
                   'Q3':[2,2,3,2,2,3,2,2], 
                   'Q4':[5,3,5,2,3,2,4,5], 
                   'Q5':[2,2,3,2,2,2,2,2]})

dfm = df.merge(df, how='cross').set_index(['name_x','name_y'])

dfm.columns = dfm.columns.str.split('_', expand=True)

df_out = dfm.stack(0).apply(pd.to_numeric, errors='coerce').diff(axis=1).eq(0).sum(axis=1).groupby(level=[0,1]).sum().unstack()

输出:

name_y  A001  A002  A003  A004  A005  A006  A007  A008
name_x                                                
A001       5     3     2     2     4     1     2     4
A002       3     5     2     3     4     2     3     3
A003       2     2     5     1     1     2     1     2
A004       2     3     1     5     2     4     3     2
A005       4     4     1     2     5     1     2     3
A006       1     2     2     4     1     5     2     1
A007       2     3     1     3     2     2     5     2
A008       4     3     2     2     3     1     2     5

【讨论】:

  • 引发此错误,因为数据集包含预期的空值很少:如果 NA TypeError: unsupported operand type(s) for -: 'str' and 'int' 不要增加计数 如 Q14 中所示对于 A001
  • 看起来你们中的一些人回答。字符串而不是数字。在您的测试数据中包含该 NA 值,我将修复代码。
  • 我为 A008 Q3 添加了 NAN
  • @Peaches 刚刚再次更新,添加了 pd.to_numeric 转换。
猜你喜欢
  • 2017-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-14
  • 1970-01-01
  • 2021-10-27
  • 1970-01-01
相关资源
最近更新 更多