【问题标题】:Pandas DataFrame Slice Column Based on ConditionPandas DataFrame 基于条件的切片列
【发布时间】:2019-06-27 03:39:54
【问题描述】:

我希望根据条件对数据框列中的行进行切片 - 我知道我可以使用 .loc 根据给定条件为我的 df 列中的行分配特定值,但是我需要该条件来确定要切片多少.

例如,如果行以 'A' 开头,我想要前 6 个字符 ([:6]),而如果它以 'B' 开头,我希望它有前 8 个字符 ([:8 ])。

我这样做是为了在使用 pd.merge() 与另一个数据帧执行内部连接之前将数据转换为正确的格式

.loc。我可以使用 df.loc[df['column'][:1] == 'A'],但它没有给我满足条件的行的索引。我能想到的最佳解决方案是创建一个包含所有满足条件的索引的列表,然后逐行操作。有没有更好的方法来做到这一点?

【问题讨论】:

  • 您介意提供一个带有表格的简短代码示例来显示您正在寻找的结果吗?你的措辞让人有点难以理解你在问什么。

标签: python pandas dataframe


【解决方案1】:

您可以通过np.select查看

m1 = df.col.str[0] == 'A'
m2 = df.col.str[0] == 'B'
df['NewCol'] = np.select([m1, m2], [df.col.str[:6], df.col.str[:8]], default = df.col)

【讨论】:

  • 你认为使用 np.where() 来避免 m1/m2 初始化可能更容易吗?
  • @krewsayder 我不确定他在前导字符中只有 A 和 B
  • 好点。假设它只有 a/b 会更有效吗?
猜你喜欢
  • 2015-07-19
  • 2021-03-21
  • 1970-01-01
  • 2018-06-17
  • 1970-01-01
  • 2019-04-10
  • 1970-01-01
  • 2019-05-19
  • 1970-01-01
相关资源
最近更新 更多