当前位置: 首页 > 面试题库 >

熊猫:分别对每一列进行排序

轩辕奕
2023-03-14
问题内容

我的数据框看起来像这样,只是更大了。

d = {'Col_1' : pd.Series(['A', 'B']),
 'Col_2' : pd.Series(['B', 'A', 'C']),
 'Col_3' : pd.Series(['B', 'A']),
 'Col_4' : pd.Series(['C', 'A', 'B', 'D']),
 'Col_5' : pd.Series(['A', 'C']),}
df = pd.DataFrame(d)

Col_1  Col_2  Col_3  Col_4  Col_5
  A      B      B      C      A
  B      A      A      A      C
  NaN    C      NaN    B      NaN
  NaN    NaN    NaN    D      NaN

首先,我尝试对每个列进行单独排序。我试过玩类似的东西:df.sort([lambda x: x in df.columns], axis=1, ascending=True, inplace=True)但是最终只会出错。如何分别对每一列进行排序,以得到类似以下内容的结果:

Col_1  Col_2  Col_3  Col_4  Col_5
  A      A      A      A      A
  B      B      B      B      C
  NaN    C      NaN    C      NaN
  NaN    NaN    NaN    D      NaN

其次,我希望将列中的行连接起来

 df = pd.concat([df,pd.DataFrame(df.sum(axis=0),columns=['Concatenation']).T])

在用’‘替换np.nan之后,我可以将所有内容与上面的行结合起来,但是结果一起被粉碎(’AB’),并且需要额外的步骤来清理(变成’A:B’之类)。


问题答案:

这是一种方法

>>> pandas.concat([df[col].order().reset_index(drop=True) for col in df], axis=1, ignore_index=True)
11:      0    1    2  3    4
0    A    A    A  A    A
1    B    B    B  B    C
2  NaN    C  NaN  C  NaN
3  NaN  NaN  NaN  D  NaN

[4 rows x 5 columns]

但是,您所做的有些奇怪。DataFrame不仅仅是不相关列的集合。在DataFrame中,每一
代表一条记录,因此一列中的值在语义上链接到同一行中其他列中的值。通过独立地对列进行排序,您将丢弃此信息,因此行现在变得毫无意义。这就是reset_index在我的示例中需要的原因。同样,由于这个原因,无法就地执行此操作,您的示例建议您这样做。



 类似资料:
  • 问题内容: 如何对pandas groupby操作应用排序?下面的命令返回一个错误,指出“布尔”对象不可调用 问题答案: 通常,排序是在groupby键上执行的,并且您发现您无法调用groupby对象,您可以做的是调用并传递函数并将列作为kwarg参数传递: 另外,您可以在分组之前对df进行排序: 更新资料 对于不建议使用的版本,请参见docs,现在应使用: 在这里在评论中添加@xgdgsc的答案

  • 问题内容: 我想对以下数据框进行排序: 我想对它进行排序,以便根据列表对LSE列进行重新排序: 当然,其他列也需要相应地重新排序。有没有办法在熊猫里做到这一点? 问题答案: pandas0.15版中对s的改进支持使您可以轻松做到这一点: 如果这只是临时排序,则可能不希望将LSE列保留为a ,但是如果您希望这种排序能够在不同的上下文中使用几次,则是一个很好的解决方案。 在更高版本的,中,已被替换为,

  • 问题内容: 我有一个这样的数据框: 我要 然后然后为每个pidx 然后是每个组的前2名。 我正在寻找的结果是这样的: 我试过的是: 这似乎可行,但我不知道如果处理庞大的数据集,这是否是正确的方法。我还能使用什么其他最佳方法来获得这种结果? 问题答案: 有两种解决方案: 1.和合计: 2.和合计: 时间 :

  • 问题内容: 我有一个简单的数据框,我想每3行进行装箱。 看起来像这样: 我想把它变成这样: 你能帮我吗? 非常感谢! 问题答案: 在Python 2中使用:

  • 问题内容: 我知道必须在某些地方回答此问题,但我找不到它。 问题 :groupby操作后对每个组进行采样。 问题答案: 应用lambda并使用param调用:

  • 问题内容: 我有一个熊猫数据框,如下所示: 我想按它排序,但该列只是一个。 我试图将列设置为日期对象,但是遇到了一种格式不需要的格式的问题。所需的格式为等。 因此,现在我试图找出如何使numpy将“美国”日期转换为ISO标准,以便可以使它们成为日期对象,以便可以对它们进行排序。 我该如何将这些美国日期转换为ISO标准,或者我在熊猫中缺少更直接的方法? 问题答案: 您可以用来转换为日期时间对象。它带