当前位置: 代码迷 >> python >> 熊猫:最后一个非相等行的索引
  详细解决方案

熊猫:最后一个非相等行的索引

热度:28   发布时间:2023-06-13 15:15:17.0

我有一个带有排序索引I的熊猫数据框F 我有兴趣知道其中一列的最新变化,比如说A 特别是,我想构造一个具有与F相同的索引的序列,即I ,其在i值为j ,其中j是小于i的最大索引值,从而F[A][j] != F[A][i] 例如,考虑以下框架:

  A
1 5
2 5
3 6
4 2
5 2

所需的序列为:

1 NaN
2 NaN
3   2
4   3
5   3

有没有熊猫/ numpy惯用的方式来构造这个系列?

尝试这个:

df['B'] = np.nan
last = np.nan
for index, row in df.iterrows():
    if index == 0:
        continue
    if df['A'].iloc[index] != df['A'].iloc[index - 1]:
        last = index
    df['B'].iloc[index] = last

这将使用结果创建一个新列。 我认为在行中更改行并不是一个好主意,在那之后,您可以简单地替换一列并删除另一行。

布尔数据上的或可以帮助您找到第一个(在本例中为最后一个) True值。 不过,您仍然必须在此解决方案中循环讨论该系列。

# Initiate source data
F = pd.DataFrame({'A':[5,5,6,2,2]}, index=list('fobni'))

# Initiate resulting Series to NaN
result = pd.Series(np.nan, index=F.index)

for i in range(1, len(F)):
    value_at_i = F['A'].iloc[i]
    values_before_i = F['A'].iloc[:i]
    # Get differences as a Boolean Series
    # (keeping the original index)
    diffs = (values_before_i != value_at_i)
    if diffs.sum() == 0:
        continue
    # Reverse the Series of differences,
    # then find the index of the first True value
    j = diffs[::-1].argmax()
    result.iloc[i] = j
  相关解决方案