pandas - 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”,但按排序顺序。我不知道如何使用熊猫来做到这一点。我想到的唯一解决方案是使用列表作为中间步骤:
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
推荐阅读
- perl - Perl Regex:负前瞻交叉线
- jquery - 当我单击一个下拉切换时,防止显示所有下拉切换
- java - 构建一个包含跨架构编译的共享库的 JAR
- .net - 在 .NET 中过滤 xUnit 测试的好方法是什么?
- bluetooth-lowenergy - 蓝牙 LE 广告观察者未在 HoloLens 2 上接收
- android - 如何在 Kotlin 中获取对枚举类本身(不仅仅是单个案例)的引用作为类变量?
- docker - 使用 gitlab shell 运行器的多个 docker-compose 文件
- android - 电容器Android管道建设但不再工作
- javascript - 如果对象属性不存在,则跳过它
- css - Bootstrap 5 装订线与边距