【问题标题】:Python: select rows with changed valuesPython:选择具有更改值的行
【发布时间】:2019-12-06 12:53:14
【问题描述】:

假设我们有 2 个数据帧,A 和 B,如下所示:

A = B =

并且可以用以下代码计算:

A = pd.DataFrame([['A','A1',1], ['B','B1' ,3], ['C', 'C2', 5], ['D','D1',7], ['E','E4',9], ['F','F1',11]], columns=['Label1','Label2' , 'Value'])
B = pd.DataFrame([['A','A1', 1], ['B','B1',4], ['C','C2',3], ['D','D2',7], ['E','E4',8], ['F','F2',11]], columns=['Label1','Label2' ,'Value'])

在此示例中,标签放置在两个矩阵中的相同索引上,但不必如此。

我想选择 B 的行,其中“值”与矩阵 A 中的相应值相比发生了变化(即相同的 label1 和 label2)。更好的是:是否可以单独选择值增加和减少的行?

我知道只需逐个查看条目即可,但我想知道是否有更有效的方法?

值增加的行的期望输出:

[B  B1 4]

价值减少的行的期望输出:

[C C2 5]
[E E4 8]

【问题讨论】:

  • 你能添加预期的输出吗?例如,您希望如何处理标签不同的行?
  • 你能发布你想要的输出吗?当label1label2 相同但value 不同时,或者label1label2 相同且value 相同时,我不完全确定你会做什么
  • 我已经包含了所需的输出,感谢您的评论。

标签: python pandas slice


【解决方案1】:

要处理在两个数据框中都有标签的行,您可以加入数据框,然后比较两列:

A = pd.DataFrame([['A','A1',1], ['B','B1' ,3], ['C', 'C2', 5], ['D','D1',7], ['E','E4',9], ['F','F1',11]], columns=['Label1','Label2' , 'ValueA'])
B = pd.DataFrame([['A','A1', 1], ['B','B1',4], ['C','C2',3], ['D','D2',7], ['E','E4',8], ['F','F2',11]], columns=['Label1','Label2' ,'ValueB'])

df = pd.merge(A, B, on = ['Label1', 'Label2'])
df

    Label1 Label2  ValueA  ValueB
0      A     A1       1       1
1      B     B1       3       4
2      C     C2       5       3
3      E     E4       9       8

df['Comparison'] = np.where(df['ValueA'] > df['ValueB'], 'A>B', np.where(df['ValueA'] < df['ValueB'], 'A<B', 'A=B'))

df

  Label1 Label2  ValueA  ValueB Comparison
0      A     A1       1       1        A=B
1      B     B1       3       4        A<B
2      C     C2       5       3        A>B
3      E     E4       9       8        A>B

【讨论】:

    猜你喜欢
    • 2021-08-23
    • 1970-01-01
    • 2021-04-23
    • 1970-01-01
    • 2021-09-11
    • 1970-01-01
    • 2012-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多