我有一個包含 3 列的表 - a、b 和 c。如何添加第 4 列 (d),它按排序順序(跨列)存盤日期的列名,同時忽略 NaT 單元格 - 示例如下所示:
a b c d
|:------------:|:------------:|:-------------:|:-----------:|
| 2022-01-15 | 2022-01-09 | 2022-01-13 | [b, c, a] |
| 2022-02-11 | NaT | 2022-02-20 | [a, c] |
| 2022-02-15 | 2022-02-14 | NaT | [b, a] |
對于第一行,d 列中的值是 [b,c,a],因為 b 中的值 < c 中的值 < a 中的值
uj5u.com熱心網友回復:
用于np.argsort洗掉missi值的位置列并轉換為lambda函式中的串列:
df['d'] = df.apply(lambda x: list(df.columns[np.argsort(x.dropna())]), axis=1)
或按行排序,洗掉 NaN 并將索引轉換為串列:
df['d'] = df.apply(lambda x: x.sort_values().dropna().index.tolist(), 1)
或 reshape byDataFrame.stack洗掉缺失值,按 2 列排序并聚合lists:
df['d'] = (df.stack()
.rename_axis(['idx','c'])
.reset_index(name='val')
.sort_values(['idx', 'val'])
.groupby('idx')['c']
.agg(list))
print (df)
a b c d
0 2022-01-15 2022-01-09 2022-01-13 [b, c, a]
1 2022-02-11 NaT 2022-02-20 [a, c]
2 2022-02-15 2022-02-14 NaT [b, a]
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/427433.html
標籤:python-3.x 熊猫
