Python 如何根据另一列中的值填充组中的np.nan列?
我需要使用分组和基于另一列的条件来回填数据帧的子集Python 如何根据另一列中的值填充组中的np.nan列?,python,pandas,group-by,Python,Pandas,Group By,我需要使用分组和基于另一列的条件来回填数据帧的子集 data = [ ["1A", "aa", "2020-05-09"], ["1A", np.nan, "2020-05-09"], ["1A", "ab", "2020-05-10"], ["2A", "bb",
data = [
["1A", "aa", "2020-05-09"],
["1A", np.nan, "2020-05-09"],
["1A", "ab", "2020-05-10"],
["2A", "bb", "2020-05-09"],
["2A", np.nan, "2020-05-09"],
["2A", "bc", "2020-05-10"],
]
df = pd.DataFrame(data, columns=["product", "value", "dates"])
df
本质上,对于产品的子集,我需要基于当前日期回填值。例如:对于产品
1A,我需要用aa
填写值
,因为它们都有日期2020-05-09
我还需要在数据集的一个子集上执行此操作,并在完成此操作后将其与其余数据连接起来
我尝试使用带有lambda函数(ffill或bfill)的groupby,但这不起作用,因为我确实需要根据条件填充值
任何帮助都将不胜感激 让我们试试变换
df.value.fillna(df.groupby(['dates','product'])['value'].transform('first'),inplace=True)
df
product value dates
0 1A aa 2020-05-09
1 1A aa 2020-05-09
2 1A ab 2020-05-10
3 2A bb 2020-05-09
4 2A bb 2020-05-09
5 2A bc 2020-05-10
让我们试试变换
df.value.fillna(df.groupby(['dates','product'])['value'].transform('first'),inplace=True)
df
product value dates
0 1A aa 2020-05-09
1 1A aa 2020-05-09
2 1A ab 2020-05-10
3 2A bb 2020-05-09
4 2A bb 2020-05-09
5 2A bc 2020-05-10
你可以放弃na,然后加入原始df
df = df.set_index(['product','dates'])
df.join(df.dropna(), how='left', lsuffix="_drop").loc[:,['value']].reset_index()
product dates value
0 1A 2020-05-09 aa
1 1A 2020-05-09 aa
2 1A 2020-05-10 ab
3 2A 2020-05-09 bb
4 2A 2020-05-09 bb
5 2A 2020-05-10 bc
你可以放弃na,然后加入原始df
df = df.set_index(['product','dates'])
df.join(df.dropna(), how='left', lsuffix="_drop").loc[:,['value']].reset_index()
product dates value
0 1A 2020-05-09 aa
1 1A 2020-05-09 aa
2 1A 2020-05-10 ab
3 2A 2020-05-09 bb
4 2A 2020-05-09 bb
5 2A 2020-05-10 bc
尝试通过groupby()
和ffill()
:
df的输出
:
product value dates
0 1A aa 2020-05-09
1 1A aa 2020-05-09
2 1A ab 2020-05-10
3 2A bb 2020-05-09
4 2A bb 2020-05-09
5 2A bc 2020-05-10
尝试通过groupby()
和ffill()
:
df的输出
:
product value dates
0 1A aa 2020-05-09
1 1A aa 2020-05-09
2 1A ab 2020-05-10
3 2A bb 2020-05-09
4 2A bb 2020-05-09
5 2A bc 2020-05-10