一列中的更改应使另一列中的更改生效

2024-06-12 19:54:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两列,比如A和B:

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

等等。你知道吗

当我试图改变A时,B中的条目保持不变,它们不会根据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)    

任何帮助都将不胜感激。你知道吗


Tags: noinaschangeshoulda13a12a14
1条回答
网友
1楼 · 发布于 2024-06-12 19:54:58

为了修改第二列,您需要在某个时刻获取要修改的行的索引。我不太了解熊猫图书馆,但我可以给你一个解决方案:

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

相关问题 更多 >