gpt4 book ai didi

python - Pandas 将 nan 替换为基于另一列的第一个非 nan 值

转载 作者:行者123 更新时间:2023-12-01 06:29:18 25 4
gpt4 key购买 nike

我有一个以下形式的数据框:(不仅仅是这些列 - 为简洁起见,删除了更多列)

import pandas as pd

headers = ['A','B','C']
data = [['p1','','v1'],
['p2','','ba'],
['p3',9,'fg'],
['p1',1,'fg'],
['p2',45,'af'],
['p3',1,'fg'],
['p1',1,'hf']
]

df = pd.DataFrame(data,columns=headers)

A B C
0 p1 v1
1 p2 ba
2 p3 9 fg
3 p1 1 fg
4 p2 45 af
5 p3 1 fg
6 p1 1 hf

B 列有重复项,因此最新值应为非 NA(但也可能不是)

我想用最新的非 NA 值替换 B 列值。像这样的事情:

unique_people = df['A'].unique()
for person in unique_people:
sub_df = df[df['A'] == person]
val = sub_df['B'].tail(1).values
df['A'][df['A'] == person] = val # this also doesnt work because its not inplace

我确信有更好的方法可以做到这一点,但我不确定如何做。谁能指出更好的方法吗?

谢谢!

最佳答案

首先将空字符串替换为缺失值,然后使用 GroupBy.transformGroupBy.last对于每组的最后一个非缺失值:

headers = ['A','B','C']
data = [['p1','','v1'],
['p2','','ba'],
['p3',9,'fg'],
['p1',1,'fg'],
['p2',45,'af'],
['p3',1,'fg'],
['p1','','hf']
]

df = pd.DataFrame(data,columns=headers)

df['B'] = df['B'].replace('', np.nan)

df['B'] = df.groupby('A')['B'].transform('last')
print (df)
A B C
0 p1 1.0 v1
1 p2 45.0 ba
2 p3 1.0 fg
3 p1 1.0 fg
4 p2 45.0 af
5 p3 1.0 fg
6 p1 1.0 hf

关于python - Pandas 将 nan 替换为基于另一列的第一个非 nan 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59980909/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com