#python #python-3.x #dataframe
#python #python-3.x #фрейм данных
Вопрос:
У меня есть два столбца, скажем, 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)
Любая помощь будет высоко оценена.
Комментарии:
1. Пожалуйста, попробуйте объяснить логику того, что вы пытаетесь сделать вместо этого
2. Спасибо за ответ. Я выбрал A и B, удалил значения ‘nan’, а затем расположил A с наиболее повторяющимся значением вверху. Я заархивировал A с помощью B, чтобы оно менялось по мере изменения A. Я даже пробовал переставлять значения после архивирования, но это все равно дает мне тот же результат.
Ответ №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
Комментарии:
1. Спасибо за ответ! И у меня это сработало. Большое спасибо.