Панды: объединить два столбца данных в отсортированном столбце - PullRequest
0 голосов
/ 07 июня 2018

Предположим, у меня есть этот фрейм данных:

Импортируйте панд как pd

def creatingDataFrame():

    raw_data = {'Region1': ['A', 'A', 'C', 'B' , 'A', 'B'],
                'Region2': ['B', 'C', 'A', 'A' , 'B', 'A'],
                'var-1': [20, 30, 40 , 50, 10, 20],
                'var-2': [3, 4 , 5, 1, 2, 3]}
    df = pd.DataFrame(raw_data, columns = ['Region1', 'Region2','var-1', 'var-2'])
    return df

Я хочу создать этот столбец:

df['segment']=['A-B','A-C','A-C','A-B','A-B','A-B']

Обратите внимание, что он используетстолбцы «Регион1» и «Регион2», но в отсортированном порядке.Я понятия не имею, как это сделать с помощью панд.Единственное решение, которое я имею в виду, - использовать список в качестве промежуточного шага:

Regions=df[['Region1','Region2']].values.tolist()
segments=[]
for i in range(np.shape(Regions)[0]):
    auxRegions=sorted(Regions[i][:])
    segments.append(auxRegions[0]+'-'+auxRegions[1])
df['segments']=segments

Чтобы получить:

>>> df['segments']
0    A-B
1    A-C
2    A-C
3    A-B
4    A-B
5    A-B

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Вам нужно:

df['segments'] = ['-'.join(sorted(tup)) for tup in zip(df['Region1'], df['Region2'])]

Вывод:

    Region1 Region2  var-1  var-2 segments
0       A       B     20      3      A-B
1       A       C     30      4      A-C
2       C       A     40      5      A-C
3       B       A     50      1      A-B
4       A       B     10      2      A-B
5       B       A     20      3      A-B
0 голосов
/ 07 июня 2018

np.sort

v = np.sort(df.iloc[:, :2], axis=1).T
df['segments'] = [f'{i}-{j}' for i, j in zip(v[0], v[1])]  # '{}-{}'.format(i, j)

df
  Region1 Region2  var-1  var-2 segments
0       A       B     20      3      A-B
1       A       C     30      4      A-C
2       C       A     40      5      A-C
3       B       A     50      1      A-B
4       A       B     10      2      A-B
5       B       A     20      3      A-B

DataFrame.agg + str.join

df['segments'] = pd.DataFrame(
    np.sort(df.iloc[:, :2], axis=1)).agg('-'.join, axis=1)

df
  Region1 Region2  var-1  var-2 segments
0       A       B     20      3      A-B
1       A       C     30      4      A-C
2       C       A     40      5      A-C
3       B       A     50      1      A-B
4       A       B     10      2      A-B
5       B       A     20      3      A-B

(Один выше, быстрее.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...