【问题标题】:pandas dataframe take rows before certain indexes熊猫数据框在某些索引之前取行
【发布时间】:2018-09-16 12:24:11
【问题描述】:

我有一个数据框和一个索引列表,我想获得一个新的数据框,这样对于每个索引(从给定的最后一个),我将获取与给定列的值匹配的所有前面的行在索引处。

      C1 C2 C3
0     1  2  A
1     3  4  A
2     5  4  A
3     7  5  B
4     9  7  C
5     2  3  D
6     1  1  D

c3 列的索引(行号)2、4、5 我的新数据框将是:

     C1 C2 C3
0     1  2  A
1     3  4  A
2     5  4  A
4     9  7  C
5     2  3  D

解释:

对于索引 2,选择行 0、1、2,因为 C3 在所有行中都相等。

对于索引 4,没有前一行是有效的。

对于索引 5,前面的行也无效,而第 6 行无关紧要,因为它不在前面。 最好的方法是什么?

【问题讨论】:

  • @SaiKumar 我编辑了,现在好些了吗?请看示例
  • 你能告诉我为什么你想要的输出只有0,1,2,4,5行吗?
  • @SaiKumar 已添加到帖子中,谢谢!

标签: python pandas dataframe data-processing data-munging


【解决方案1】:

如果您希望前面的行与条件匹配,您可以设置条件来过滤数据。

ind= 2
col ='C3'
# ".loc[np.arange(ind+1)]" creates indexes till preceding row, so rest of matching conditions can be ignored 
df.loc[df.loc[ind][col] == df[col]].loc[np.arange(ind+1)].dropna()

输出:

   C1   C2  C3
0   1   2   A
1   3   4   A
2   5   4   A

应用到其他列

ind= 2
col ='C2'
df.loc[df.loc[ind][col] == df[col]].loc[np.arange(ind+1)].dropna()

输出:

   C1   C2  C3
1   3.0 4.0 A
2   5.0 4.0 A

【讨论】:

  • 你能解释一下.loc[np.arange(ind+1)]吗?
  • 首先条件将选择df中的所有匹配条件,iloc在ind行之前创建索引,因此可以忽略其余匹配条件:-) @oren_isp
猜你喜欢
  • 1970-01-01
  • 2022-07-10
  • 2020-02-08
  • 2017-06-08
  • 1970-01-01
  • 2021-11-11
  • 1970-01-01
  • 2016-02-17
  • 2018-01-02
相关资源
最近更新 更多