一栏中的更改也应在另一栏中进行更改

时间:2019-03-05 11:06:08

标签: python python-3.x dataframe

我有两列,分别说A和B:

A     B
A12   A14
A13   A22
B54   A43
B43   B52
A43   B52
A43   B53

以此类推。

当我尝试更改A时,B中的条目保持不变,根据A的要求它们不会更改。 当我尝试根据A的出现来安排A时,B不会遵循同一件事。它保持在相同的位置。
这是我得到的输出:

     A     B
   A43   A14
   A43   A22
   A12   A43
   A13   B52
   B54   B52 #no change occurs
   B43   B53 #no change occurs

预期的输出将类似于:

     A     B
    A43   B52   #Change in A should make change in B as well. 
    A43   B53   #values in B should get affected due to changes in A
    A12   A14
    A13   A22
    B54   A43
    B43   B52

由于A43重复了两次,因此应该先进行一次。 我正在使用此代码,但是更改仅适用于A,不适用于B。

import pandas as pd
y= M['A']= M['A'].astype(str)
i= M['B']= M['B'].astype(str)
e= y[y!='nan']
z= i[i!= 'nan']
f= (list(chain.from_iterable(repeat(i, c) for i,c in Counter(e).most_common())))
j= [''.join(x) for x in zip(e, z)]
print(f)    

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

为了修改第二列,您需要在某个时候获取必须修改的行的索引。我不太了解pandas库,但是,我可以给您一个解决方案:

import pandas as pd
import collections

M = pd.DataFrame({'A': ['A12', 'A13', 'B54', 'B43', 'A43', 'A43'], 'B': ['A14', 'A22', 'A43', 'B52', 'B52', 'B53']}

output = pd.DataFrame(columns=['A', 'B'])

for i, c in collections.Counter(e).most_common():
    lines = M.loc[M['A']==i].index.values   # returns line indices
    for line in lines:
        output.loc[len(output)] = M.iloc[line]

结果是:

In [74]: output
Out[74]:
     A    B
0  A43  B52
1  A43  B53
2  A12  A14
3  A13  A22
4  B54  A43
5  B43  B52