Pandas:将两个数据框列组合在一个排序列中

标签 pandas dataframe

假设我有这个数据框:

将 Pandas 导入为 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']

请注意,它使用的是“Region1”和“Region2”列,但按排序顺序。我不知道如何使用 Pandas 来做到这一点。我想到的唯一解决方案是使用列表作为中间步骤:

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

最佳答案

你需要:

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

关于Pandas:将两个数据框列组合在一个排序列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50730787/

相关文章:

python - 如何在 Pandas 饼图中显示值?

python - 创建新的 pandas 行,作为来自不同行的文本值组合的结果,这些文本值在其他 pandas 列中具有相同的值

python - Pandas 在 groupby.apply(..) 之后删除组列

r - 比较三列并在 R 数据框中创建一个新列

python - pandas:使用运算符链接过滤 DataFrame 的行

python - 根据其他表填写表中缺失的数据

python pandas多索引选择满足条件的索引级别内的所有内容

Python:在列之间交换值以在行内对它们进行排序

python - 在python中合并具有不同时间频率的系列/数据帧

r - 根据不同数据帧中第二个(较短)列的值将值分配给列