使用所有索引旋转 Table

Pivot Table with All the Index

我正在使用 python pandas 从 df 创建一个枢轴 table。 df 看起来像:

缺少值的字段是:始发城市、装运日期、体积和着陆日期。请注意,Landing Date 是 Shipment date 和 TAT 的总和。

我想要得到的输出是这样的:

上面的输出我有以下代码:

pd.pivot_table(df, values='Volume', index=['DC'], columns=['Landing date'], aggfunc=np.sum, fill_value = 0)

我得到的实际输出是

这里的问题是我的代码删除了 DC = DLT,因为它在旋转时缺少值。有什么想法吗?

您可以使用 ffill,与 Series.fillnamethod='ffill' 相同:

print (df)
   DC Landing date  Volume
0  MAR     02-09-16    50.0
1  MAR     03-09-16    98.0
2  MAR          NaN     NaN
3  BOY     05-09-16    60.0
4  BOY     06-09-16    14.0
5  DLT          NaN     NaN
6  DLT          NaN     NaN

df['Landing date'] = df['Landing date'].ffill()
print (df)
    DC Landing date  Volume
0  MAR     02-09-16    50.0
1  MAR     03-09-16    98.0
2  MAR     03-09-16     NaN
3  BOY     05-09-16    60.0
4  BOY     06-09-16    14.0
5  DLT     06-09-16     NaN
6  DLT     06-09-16     NaN

df1 = pd.pivot_table(df, values='Volume', index=['DC'], columns=['Landing date'], aggfunc=np.sum, fill_value = 0)    
df1.index.name = None
df1.columns.name = None
print (df1)
     02-09-16  03-09-16  05-09-16  06-09-16
BOY         0         0        60        14
DLT         0         0         0         0
MAR        50        98         0         0

您可以 fillna 通过第 Landing date 列中的第一个非 NaN 值:

val = df['Landing date'].dropna().iloc[0]
print (val)
02-09-16

df['Landing date'] = df['Landing date'].fillna(val)
print (df)
    DC Landing date  Volume
0  MAR     02-09-16    50.0
1  MAR     03-09-16    98.0
2  MAR     02-09-16     NaN
3  BOY     05-09-16    60.0
4  BOY     06-09-16    14.0
5  DLT     02-09-16     NaN
6  DLT     02-09-16     NaN