首页 > 解决方案 > 如何在给定条件下用其他行的值填充 DataFrame 的数据?

问题描述

我想填充一些行的值使用其他行的值。

让我举个例子:

In [7]: df = pd.DataFrame([['a', 'b', 'c', 'aa', 'ba'], [1,2,3,np.nan,np.nan]]).T

In [8]: df
Out[8]: 
    0    1
0   a    1
1   b    2
2   c    3
3  aa  NaN
4  bb  NaN

我想要的是fill df.loc[3, 1]价值df.loc[0, 1],

df.loc[4, 1]df.loc[1, 1]

因为给定条件('a' and 'aa'(loc[3,1] and loc[0, 1])具有相同的

first 'a', 'b' and 'bb' shared 'b')

有什么好的方法可以做到这一点吗?

标签: pythonpandas

解决方案


如果可能,将首字母的值与前向填充结合使用:

df[1] = df.groupby(df[0].str[0])[1].ffill()
print (df)
    0  1
0   a  1
1   b  2
2   c  3
3  aa  1
4  ba  2

如果需要用第一个非缺失值替换,请GroupBy.transform使用GroupBy.first

df = pd.DataFrame([['aa', 'b', 'c', 'a', 'ba'], [np.nan,2,3,1,np.nan]]).T
print (df)
    0    1
0  aa  NaN
1   b    2
2   c    3
3   a    1
4  ba  NaN

df[1] = df.groupby(df[0].str[0])[1].transform('first')
print (df)
    0  1
0  aa  1
1   b  2
2   c  3
3   a  1
4  ba  2
    

推荐阅读