我有两列,分别说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)
任何帮助将不胜感激。
答案 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