pandas 用Python中的字典替换 Dataframe 空值

g2ieeal7  于 2022-11-20  发布在  Python
关注(0)|答案(1)|浏览(185)

我有一个 Dataframe (非常大),其中有一些空值,我可以替换它们,因为有两列:名字和重量,名字出现很多次,有时有重量,有时没有。这是一个小例子,我试图解决它。
首先,我创建了 Dataframe :

import pandas as pd
import numpy as np

lst1 = ["AA","BB","CC","AA","BB","CC","AA","BB","CC"]
lst2 = [12,np.nan,14,12,15,14,np.nan,np.nan,14]
df = pd.DataFrame(list(zip(lst1,lst2)), columns = ['Name','Weight'])

接下来,我用字典找到了每个名字的权重值:

df_2 = df.groupby('Name')['Weight'].max()
dic = df_2.to_dict()

最后我创建了一个循环来替换这一切:

for k,v in dic:
  for i in range(len(df)):
    if df['Weight'][i] == None and k == df['Name'][i]:
      df['Weight'][i] = v
  else:
    print(df)

但是它返回了相同的 Dataframe ,我不知道还有什么要做的。如果你能帮助我或者给予一个建议,我会非常感谢你的。

7xllpg7q

7xllpg7q1#

也许您可以将NaN填入.groupby

df["Weight"] = df.groupby("Name", group_keys=False)["Weight"].apply(
    lambda x: x.fillna(x.max())
)
print(df)

印刷品:

Name  Weight
0   AA    12.0
1   BB    15.0
2   CC    14.0
3   AA    12.0
4   BB    15.0
5   CC    14.0
6   AA    12.0
7   BB    15.0
8   CC    14.0

或:

x = df.groupby("Name")["Weight"].max()

df = df.set_index("Name")
df["Weight"] = df["Weight"].fillna(x)
df = df.reset_index()

print(df)

印刷品:

Name  Weight
0   AA    12.0
1   BB    15.0
2   CC    14.0
3   AA    12.0
4   BB    15.0
5   CC    14.0
6   AA    12.0
7   BB    15.0
8   CC    14.0

相关问题