我有以下熊猫数据框:
df = pd.DataFrame([
['A', 2017, 1],
['A', 2019, 1],
['B', 2017, 1],
['B', 2018, 1],
['C', 2016, 1],
['C', 2019, 1],
], columns=['ID', 'year', 'number'])
Run Code Online (Sandbox Code Playgroud)
并且正在寻找最有效的方法来填充缺失的年份,该列的默认值为 0 number
预期的输出是:
ID year number
0 A 2017 1
1 A 2018 0
2 A 2019 1
3 B 2017 1
4 B 2018 1
5 C 2016 1
6 C 2017 0
7 C 2018 0
8 C 2019 1
Run Code Online (Sandbox Code Playgroud)
我拥有的数据框相对较大,因此我正在寻找一种有效的解决方案。
编辑:
这是我到目前为止的代码:
min_max_dict = df[['ID', 'year']].groupby('ID').agg([min, max]).to_dict('index')
new_ix = [[], …Run Code Online (Sandbox Code Playgroud) 我一直在寻找 pandas DataFrame 的健壮类型提示,但似乎找不到任何有用的东西。这个问题仅仅触及了表面Pythonic 类型提示与 pandas?
通常,如果我想暗示以 DataFrame 作为输入参数的函数的类型,我会这样做:
import pandas as pd
def func(arg: pd.DataFrame) -> int:
return 1
Run Code Online (Sandbox Code Playgroud)
我似乎找不到的是如何输入具有混合 dtypes 的DataFrame 提示。DataFrame 构造函数仅支持完整 DataFrame 的类型定义。因此,据我所知,数据类型的更改只能在该pd.DataFrame().astype(dtypes={})函数之后发生。
这在这里有效,但对我来说似乎不太Pythonic
import datetime
def func(arg: pd.DataFrame(columns=['integer', 'date']).astype(dtype={'integer': int, 'date': datetime.date})) -> int:
return 1
Run Code Online (Sandbox Code Playgroud)
我遇到了这个包: https: //pypi.org/project/dataenforce/,其中包含如下示例:
def process_data(data: Dataset["id": int, "name": object, "latitude": float, "longitude": float])
pass
Run Code Online (Sandbox Code Playgroud)
这看起来很有希望,但遗憾的是该项目已经过时且存在缺陷。
作为一名数据科学家,在构建具有长 ETL 流程的机器学习应用程序时,我认为类型提示非常重要。
你用什么,有人在 pandas 中输入暗示他们的数据框吗?
我的应用程序中有一个按钮,我想在用户单击它时对其进行样式设置。问题是,因为 Streamlit 不允许我们向我们创建的对象发出类,所以我需要找到一种方法以稳健且与版本无关的方式指定确切的按钮。这是按钮在 Streamlit 中的样子:
<div class="row-widget stButton" style="width: 64px;"><button kind="primary" class="css-4eonon edgvbvh1"></button></div>
Run Code Online (Sandbox Code Playgroud)