Pandas 熊猫:重新设置数据的基础,以特定大小的第一个值开始?
我有一个如下所示的数据帧:Pandas 熊猫:重新设置数据的基础,以特定大小的第一个值开始?,pandas,Pandas,我有一个如下所示的数据帧: 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 }, { "
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 }
]
name day1 day2 day2
Bob 10 24 38
Charlie
Helen 14 24
Sarah 11
我想重新确定这些数据的基础,因此对于每个人来说,它从值大于10的第一天开始
我还想重命名这些列,使它们相对于值大于10的第一天,而不是绝对天
换句话说,我希望输出数据帧如下所示:
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 }
]
name day1 day2 day2
Bob 10 24 38
Charlie
Helen 14 24
Sarah 11
这在熊猫身上可能吗
更新:也许我应该把它分解成更小的任务:
- 按行,提取100以上所有值的数组
- 对于每一行,将其附加到一个新的数组数组中,并右键填充空值
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
day1
、day2
等是什么意思?在这种情况下,您能否使其与提供的示例数据集一致。另外,如果您想要值>10
,为什么不删除5
?抱歉-更新可能需要.reindex(df.index)
将“Charlie”带回来…我认为在这里使用它更快numpy@ansev您假设该值每天都在增加