在 Pandas 中合并列和排序

Posted

技术标签:

【中文标题】在 Pandas 中合并列和排序【英文标题】:Combine columns and sort in Pandas 【发布时间】:2020-07-27 21:35:29 【问题描述】:

例如,假设我有一个包含第 1、2 和 3 列的表。第 1 列包含狗、猫、狗。我想合并第 2 列和第 3 列

chars = ['column2', 'column3']
csv['combined'] = csv[chars].apply(lambda row: ','.join(row.values.astype(str)), axis=1)

现在假设 column2 第 1 行包含 a,第 2 行包含 b,第 3 行包含 c。假设 column3 第 1 行包含 b,第 2 行包含 c,第 3 行包含 a。我想排序并拥有第 1 行显示 (a, b),然后是第 3 行,它也应该是 (a, c)。即使我尝试这样的 sort_values,我也无法让第 3 行中的 a 优先:

csv['combined'] = csv['combined'].sort_values()

最终我想按第 1 列分组,然后聚合。最后我应该看到(dog, a,c), (dog, a,c), and (cat, b, c)

【问题讨论】:

【参考方案1】:

您希望按升序对行进行排序。这种情况你可以试试np.sort

cols = ['column2','column3']

df[cols] = np.sort(df[cols], axis=1)

输出:

  column1 column2 column3
0     dog       a       b
1     cat       b       c
2     dog       a       c

【讨论】:

【参考方案2】:

希望这会有所帮助,快乐编码:)

df = pd.DataFrame(data=[['dog','a','b'],['cat','b','c']['dog','c','a']],columns=(['animal','column1','column2']))
print("Actual DataFrame \n")
print(df)

for i in range(len(df)):
  if df.loc[i]['column1']>df.loc[i]['column2']:
      tmp=df.loc[i]['column1'] 
      df.loc[i]['column1'] =df.loc[i]['column2']
      df.loc[i]['column2'] = tmp

print("\n Transformed DataFrame \n")
print(df.sort_values(by='animal',ascending=False))

【讨论】:

以上是关于在 Pandas 中合并列和排序的主要内容,如果未能解决你的问题,请参考以下文章

pandas计算dataframe结束时间列和起始时间列的时间差使用sort_values函数对dataframe数据基于时间差进行排序(默认为升序排序)

pandas基础(part4)--排序/分组/合并

Pandas 多索引排序

排序后,pandas merge_asof键必须排序错误

合并 Pandas Dataframe:如何添加列和替换值

python--pandas合并与连接