我如何df.fillna具有类别中值值

发布于 2025-02-04 04:24:38 字数 973 浏览 4 评论 0 原文

我有一个大的数据集〜1MLN行,约有5000个缺席坐标(我想按“城市”类别填充中位数,但是Fillna正在奏效,如何实现它?

city = ['London', 'Paris', 'Vienna', 'Milan','London', 'Paris', 'Vienna', 'Milan']
lat = [51.510843900000005, 48.8671391, 48.204465500000005, 45.4787357, 51.510843900000005, 48.8671391, None,  None]
lng = [-0.1424476, 2.328075, 16.3686397, 9.1961308, -0.14244, 2.329, None, None]

data = pd.DataFrame(list(zip(city, lat, lng)),columns =['city', 'lat', 'lng'])

display(data['lat'].isna().sum())  # 2
display(data['lng'].isna().sum())  # 2

for city_name in set(data['city']):
    data[data['city'] == city_name ]['lat'].fillna(data[data['city'] == city_name ]['lat'].median())
    data[data['city'] == city_name ]['lng'].fillna(data[data['city'] == city_name ]['lng'].median())
    print(city_name, data[data['city'] == city_name ]['lat'].median(),data[data['city'] == city_name ]['lng'].median())

display(data['lat'].isna().sum())  # 2
display(data['lng'].isna().sum())  # 2 

I have a large dataset ~1mln rows, and about 5000 absent coordinates(i'd like to fill them with median value by category 'city'everything but fillna is working, how to make it happen?

city = ['London', 'Paris', 'Vienna', 'Milan','London', 'Paris', 'Vienna', 'Milan']
lat = [51.510843900000005, 48.8671391, 48.204465500000005, 45.4787357, 51.510843900000005, 48.8671391, None,  None]
lng = [-0.1424476, 2.328075, 16.3686397, 9.1961308, -0.14244, 2.329, None, None]

data = pd.DataFrame(list(zip(city, lat, lng)),columns =['city', 'lat', 'lng'])

display(data['lat'].isna().sum())  # 2
display(data['lng'].isna().sum())  # 2

for city_name in set(data['city']):
    data[data['city'] == city_name ]['lat'].fillna(data[data['city'] == city_name ]['lat'].median())
    data[data['city'] == city_name ]['lng'].fillna(data[data['city'] == city_name ]['lng'].median())
    print(city_name, data[data['city'] == city_name ]['lat'].median(),data[data['city'] == city_name ]['lng'].median())

display(data['lat'].isna().sum())  # 2
display(data['lng'].isna().sum())  # 2 

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一直在等你来 2025-02-11 04:24:38

您可以做:

data.groupby("city").transform(lambda x: x.fillna(x.median()))

首先 href =“ https://pandas.pydata.org/pandas-docs/stable/reference/reference/pandas.series.fillna.html” rel =“ nofollow noreferrer”> fillna> fillna> fillna 并计算中位数。 (您可以使用任何数学操作)

You could do:

data.groupby("city").transform(lambda x: x.fillna(x.median()))

First groupby with the city, then use transform with fillna and calculate the median. (you could use any mathematical operation)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文