【问题标题】:Pandas - index distance between values in columnsPandas - 列中值之间的索引距离
【发布时间】:2022-10-13 20:44:06
【问题描述】:

我有一个带有一系列虚拟列的数据框。我正在尝试使用索引值将“1”转换为从每个“1”到前一个“1”的距离。这也意味着我必须跳过第一个“1”,因为它没有距离,因为缺少前面的“1”。我在所需的输出中将其标记为“A”。

我之前问过一个类似的问题,我需要到特定列中的值的距离,但我没能适应这个问题: Distance between values in dataframe

如何实现 dfTarget 的输出?

先感谢您。

df = pd.DataFrame({'index': [240, 251, 282, 301, 321, 325, 328, 408], 'e1': ['0','1','0','0','0','0','1','0'], 'e2': ['1','0','1','0','0','1','0','0']})
df.set_index('index', inplace=True)
dfTarget = pd.DataFrame({'index': [240, 251, 282, 301, 321, 325, 328, 408], 'e1': ['0','A','0','0','0','0','77','0'], 'e2': ['A','0','42','0','0','43','0','0']})
dfTarget.set_index('index', inplace=True)

print(df)
print("------")
print(dfTarget)

      e1 e2
index      
240    0  1
251    1  0
282    0  1
301    0  0
321    0  0
325    0  1
328    1  0
408    0  0
------
       e1  e2
index        
240     0   A
251     A   0
282     0  42
301     0   0
321     0   0
325     0  43
328    77   0
408     0   0

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    使用自定义函数:

    def get_diff(s):
        return (
        s.index.to_series()               # index to series
         [s.eq('1')].diff().fillna('A')   # keep 1s and get diff
         .reindex(s.index, fill_value=0)  # reindex with 0s
        )
        
    dfTarget = df.apply(get_diff)
    

    输出:

             e1    e2
    index            
    240       0     A
    251       A     0
    282       0  42.0
    301       0     0
    321       0     0
    325       0  43.0
    328    77.0     0
    408       0     0
    

    【讨论】:

    • 非常感谢。它几乎就在那里。它似乎用 0 覆盖了第一个 1 并从下一个开始。
    • @AlbaTroes 您的初始索引是否已排序?它应该是
    • 是的。在我的输出中,我得到和你一样的结果,但是,A 是 0,而 77 和 42 是 A
    • 输入相同?哪个熊猫版本?
    • 没有。我有一个错字。带来不便敬请谅解。效果很好 - 非常感谢。
    【解决方案2】:
    for col in df.columns:
        ix_list = list(df[df[col]==str(1)].index)  # get explicit index list
        for i in range(1,len(ix_list)): # this skips the first one
            previous = ix_list[i-1]
            df.loc[ix_list[i]][col] = ix_list[i] - ix_list[i-1] 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-17
      • 2021-03-19
      • 2016-12-16
      相关资源
      最近更新 更多