首页 > 解决方案 > pandas:rebase 数据以超过一定大小的第一个值开始?

问题描述

我有一个看起来像这样的数据框:

df = pd.DataFrame(data=d)
d = [
    { "name": "Bob", "1/1/20": 10, "1/2/20": 24, "1/3/20": 38 },
    { "name": "Charlie", "1/1/20": 0, "1/2/20": 0, "1/3/20": 5 },
    { "name": "Helen", "1/1/20": 4, "1/2/20": 14, "1/3/20": 24 },
    { "name": "Sarah", "1/1/20": 2, "1/2/20": 4, "1/3/20": 11 }
]

我想重新设置此数据的基础,因此对于每个人,它从值高于 10 的第一天开始。

我还想重命名这些列,使它们相对于第一天的值大于 10,而不是绝对天数。

换句话说,我想要一个如下所示的输出数据框:

name     day1     day2     day2
Bob      10       24       38
Charlie  
Helen    14       24
Sarah    11

这在熊猫中可能吗?

更新:也许我应该把它分解成更小的任务:

也许根本不使用熊猫会更好?

标签: pandas

解决方案


IIUC

df.set_index('name', inplace=True)
df.where(df >= 10).stack().to_frame('Value'). \
    assign(Day=lambda x: x.groupby(level=0).cumcount() + 1). \
    reset_index(level=0).pivot('name', 'Day', 'Value').add_prefix('Day').reindex(df.index)
Out[37]: 
Day      Day1  Day2  Day3
name                     
Bob      10.0  24.0  38.0
Charlie   NaN   NaN   NaN
Helen    14.0  24.0   NaN
Sarah    11.0   NaN   NaN

推荐阅读