Pandas:计算一行与所有其他行之间的差异并使用名称创建列

Pandas: Calculate Difference between a row and all other rows and create column with the name

我们有如下数据

   Name    value1 Value2 finallist
0  cosmos  10     20      [10,20]
1  network 30     40      [30,40]
2  unab    20     40      [20,40]

有什么方法可以区分所有行

最终输出类似于

   Name    value1 Value2 finallist  cosmos  network  unab
0  cosmos  10     20      [10,20]    0      40       30
1  network 30     40      [30,40]    40     0        10
2  unab    20     40      [20,40]    30     10       0

数据有不同类型的名称,每个名称应该是一列

您需要每行值之和的成对绝对差。最简单的方法可能是使用底层的 numpy 数组。

“值”列之和的绝对差值

# get sum of values per row and convert to numpy array
a = df['value1'].filter(regex='(?i)value').sum(1).to_numpy()

# compute the pairwise difference, create a DataFrame and join
df2 = df.join(pd.DataFrame(abs(a-a[:,None]), columns=df['Name'], index=df.index))

输出:

      Name  value1  Value2 finallist  cosmos  network  unab
0   cosmos      10      20  [10, 20]       0       40    30
1  network      30      40  [30, 40]      40        0    10
2     unab      20      40  [20, 40]      30       10     0

我不太确定你希望如何计算列中的值,所以我只取了 value1 的差值,但这与本例中的问题无关。我会按照以下方式进行:

for name in df['name']:
  vals = []
  for idx, row in df.iterrows():
     vals.append(int(df.loc[df['name'] == name].value1) - row.value1)
  df[name] = vals

因此,对于要为其创建一列的每个名称,您将仔细检查并计算差异,将其添加到列表中,然后将该列表用作新命名列的列值。

这是一个快速修复,可能还有更好的方法,但我希望这对您有所帮助!