簡體   English   中英

計算第一個值出現在熊貓數據框中的天數

[英]Calculate number ofdays until first value appears in pandas dataframe

我有以下數據集:

import pandas as pd
from datetime import datetime
import numpy as np

date_rng = pd.date_range(start='2020-07-01', end='2020-07-10', freq='d')
l1 = [np.nan, np.nan, 3, np.nan, np.nan, 4, np.nan, np.nan, 5, np.nan]
l2 = [np.nan, np.nan, np.nan, np.nan, np.nan, 4, np.nan, np.nan, 1, 3]

df = pd.DataFrame({
    'date':date_rng,
    'value':l1,
    'group':'a'
})
df2 = pd.DataFrame({
    'date':date_rng,
    'value':l2,
    'group':'b'
})

df = df.append(df2, ignore_index=True)
df

我想計算每組出現第一個值之前的天數。 我能夠使用以下代碼找到日期,但會獲得每個組的天數。

# first valid valuefor each column
df.set_index(["date"]).groupby('group')['value'].apply(pd.Series.first_valid_index)

編輯:這將是預期的結果:

columns = ["group", "number_of_days"]

df_features = pd.DataFrame([["a", 3],
                            ["b", 6],],
                  columns=columns)
df_features

GroupBy.first的第一天使用GroupBy.first ,減去Series.sub ,通過Series.sub轉換為天Series.dt.days ,加1並轉換為2 column DataFrame:

s1 = df.groupby('group')['date'].first()
s2 = df.set_index(["date"]).groupby('group')['value'].apply(pd.Series.first_valid_index)

df = s2.sub(s1).dt.days.add(1).reset_index(name='number_of_days')
print (df)
  group  number_of_days
0     a               3
1     b               6

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM