pandas - 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
这在熊猫中可能吗?
更新:也许我应该把它分解成更小的任务:
- 按行,提取所有大于 100 的值的数组
- 对于每一行,将其附加到一个新的数组数组中,并用空值填充。
也许根本不使用熊猫会更好?
解决方案
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
推荐阅读
- javascript - 如何从输入值中删除数字?
- vba - 如何删除单词中以某个单词开头的每一行?
- javascript - 连接和缩小后如何使用require js文件
- angular - Angular Routing: Should I use more than one routing file?
- angular - 我无法在选择选项中设置默认值(Angular)
- python - Python 布尔表达式
- visual-studio-code - 关闭 vscode 上的模糊完成和片段自动完成
- docker - Sonatype Nexus - 一位用户可以看到的 Docker 图像
- javascript - 为什么此显示/隐藏切换功能在 Safari 中不起作用?
- asp.net-mvc - 最近安装的包不能被引用