【问题标题】:How can I transpose duplicated values of a column to a specific position on a new column?如何将列的重复值转置到新列的特定位置?
【发布时间】:2021-09-28 23:48:48
【问题描述】:

我正在尝试将列上的重复值转换为与第一个结果位于同一行的新列

创建数据集

import numpy as np

import pandas as pd

ref = ['a','a','b','c','c','c']

z = pd.DataFrame(ref)

z = z.rename(columns={0:'name'})

查找唯一值 {name, [index position, nº duplicates]}

unique_values = {}

i = 0

while i <= len(z)-1:

for x in z.name:
    if x not in unique_values:
        unique_values[x] = i,0
        i+=1
    else:
        unique_values[x] = unique_values[x][0] , unique_values[x][1]+1
        i+=1

问题从这里开始:

我正在尝试使用 unique_values 作为(索引和重复数)的指导来创建一个新列,该列的重复值与“第一个”值位于同一行。像这样的数据集: name= ['a', 'b', 'c'] ; name1=['a', na, 'c']; name2= [ na ,na 'c']
由于某种原因,我找不到这部分不起作用的错误:请帮助
x = 1
i = 1
for k,v in unique_values.items():
if v[1] > 0:
    print(k,v,x)
    if x <= v[1]:
        z[f'name{x}'] = pd.Series(z.name.loc[z.index[v[0]+i]], index=z.index[[v[0]]])
        x+=1
        i+=1
    else:
        x = 1
        i = 1

【问题讨论】:

  • 你想用你的代码的最后一部分做什么?
  • 我正在尝试使用 unique_values 作为(索引和重复数)的指导来创建一个新列,该列的重复值与“第一个”值位于同一行。像这样:name= ['a', 'b', 'c'] name1=['a', na, 'c']。 name2= [ na ,na ''c]

标签: python pandas numpy


【解决方案1】:

如果我能很好地理解您的问题,这应该可以:

Z=z.where(z.iloc[:,0].duplicated(keep='last'))
i=0
while sum(Z.notna().values)!=0 :
    W=Z.dropna().drop_duplicates()
    i+=1
    result=[]
    for j in range(len(z)):
        try:
            result.append(W.loc[j].values[0])
        except:
            result.append(np.nan)
    z[f'name{i}']=pd.Series(result)
    Z=Z.where(Z.duplicated(keep='last'))
print(z)

【讨论】:

  • 是的!而已!太感谢了! ;)
  • 别担心,如果你觉得有用,别忘了采纳答案!
猜你喜欢
  • 1970-01-01
  • 2020-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多