簡體   English   中英

如何使用 NaN 值計算熊貓的時差

[英]How to calculate time-difference in pandas with NaN-values

我對 Pandas 比較陌生,已經嘗試過搜索,但找不到解決方案。 我有一個帶有交易編號、客戶 ID 和購買日期的數據框,如下所示:

Transaction   12345    12346       12347     12348       12349
customerID
1             NaN    2019-09-01    NaN     2019-09-11      2019-09-22...
2           2019-10-01 NaN         NaN         NaN      2019-10-07...
3    ...

數據框有 [6334 行 x 8557 列]。 每行都有 NaN 值,作為事務號。 是獨特的。

我想計算每一行的日期差異,所以我得到

customerID    Datedifference1    Datedifference2     etc.
1                10                    11
2                 6
3   ...

我正在努力獲取包含每個 customerId 的日期差異的列表。 有沒有辦法忽略數據框中的 NaN 而只計算不是 NaN 的值? 我想要一個包含 customerId 和購買 1 和 2、2 和 3 之間的日期差異的列表,以估計下一次購買之前的天數。

有解決辦法嗎?

想法是通過DataFrame.stack重塑數據,然后獲取差異,刪除每組的第一個缺失值並重塑:

df = df.apply(pd.to_datetime)

df1 = (df.stack()
         .groupby(level=0)
         .diff()
         .dropna()
         .dt.days
         .reset_index(level=1, drop=True)
         .to_frame())

df1 = (df1.set_index(df1.groupby(['customerID']).cumcount(), append=True)[0]
          .unstack()
          .add_prefix('Datedifference'))
print (df1)
             Datedifference0  Datedifference1
Transaction                                  
1                       10.0             11.0
2                        6.0              NaN

編輯:如果輸入數據不同,則更改解決方案 - 將列轉換為日期時間,通過DataFrameGroupBy.diff創建新列以獲取差異,通過DataFrame.dropna僅刪除NaN行,最后使用DataFrame.set_index重新DataFrame.set_index並通過GroupBy.cumcount使用計數器Series DataFrame.set_index unstack GroupBy.cumcount

print (df1)
   customerID Transaction       date
0           1       12346 2019-09-01
1           1       12348 2019-09-11
2           1       12349 2019-09-22
3           2       12345 2019-10-01
4           2       12349 2019-10-07

df1['date'] = pd.to_datetime(df1['date'])
df1['diff'] = df1.groupby('customerID')['date'].diff().dt.days
df1 = df1.dropna(subset=['diff'])

df2 = (df1.set_index(['customerID', df1.groupby('customerID').cumcount()])['diff']
          .unstack()
          .add_prefix('Datedifference'))
print (df2)
            Datedifference0  Datedifference1
customerID                                  
1                      10.0             11.0
2                       6.0              NaN

暫無
暫無

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

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