Python 一次使用多种fillna策略的groupby(熊猫)
如何按一列进行分组,然后在每个组中对其他列同时应用多个fillna策略?多重含义:Python 一次使用多种fillna策略的groupby(熊猫),python,pandas,nan,data-analysis,data-cleaning,Python,Pandas,Nan,Data Analysis,Data Cleaning,如何按一列进行分组,然后在每个组中对其他列同时应用多个fillna策略?多重含义: 如果是组中的第一个,则替换为零,然后ffill,直到到达第一个数据点 后面的NaN被封了 对于数据点之间的所有NaN,bfill 如果都是NaN,那就别打扰这群人 基本上,我有以下数据帧: A B C 0 A NaN NaN 1 A NaN NaN 2 A 1.0 10.0 3 A NaN NaN 4 B NaN NaN 5 B 2.0
A B C
0 A NaN NaN
1 A NaN NaN
2 A 1.0 10.0
3 A NaN NaN
4 B NaN NaN
5 B 2.0 20.0
6 B NaN 20.0
7 B NaN NaN
8 C NaN NaN
9 C NaN NaN
10 C NaN NaN
11 C NaN 30.0
我希望它变成:
A B C
0 A 0 0
1 A 0 0
2 A 1.0 10.0
3 A 1.0 10.0
4 B 0 0
5 B 2.0 20.0
6 B 2.0 20.0
7 B 2.0 20.0
8 C NaN 0
9 C NaN 0
10 C NaN 0
11 C NaN 30.0
我尝试使用df.groupby('A').nth(1)
获取第一个元素,并有条件地继续,但是groupby
创建的新索引不是原始索引(即0,4,8),无论我是否通过.reset\u index()
选项
数据帧的代码:
df=pd.DataFrame({'A':[“A”,“A”,“A”,
“B”、“B”、“B”、“B”、“C”、“C”、“C”、“C”],
“B”:[np.nan,np.nan,1,np.nan,
np.nan,2,np.nan,np.nan,
np.nan,np.nan,np.nan,np.nan],
C:[np.nan,np.nan,10,np.nan,
np.nan,20,20,np.nan,
np.nan,np.nan,np.nan,30]})
一个可能的想法是在A上使用
,然后使用自定义变压器功能:
def fx(s):
if s.isna().all():
return s
elif pd.isna(s.iloc[0]):
s.iloc[0] = 0
s = s.ffill().bfill()
return s
df[['B', 'C']] = df.groupby('A')[['B', 'C']].transform(fx)
我已经不理解第一个条件“如果组中第一个,则替换为零,然后ffill,直到到达第一个数据点”。如果NaN被零取代,那没什么好抱怨的。可能有点不清楚,是真的。我指的是启动组的NaN组的
fillna(0)
。你能用索引4解释一下第行的输出吗?这是一个打字错误,应该是0
,我会把它编辑掉。
# print(df)
A B C
0 A 0.0 0.0
1 A 0.0 0.0
2 A 1.0 10.0
3 A 1.0 10.0
4 B 0.0 0.0
5 B 2.0 20.0
6 B 2.0 20.0
7 B 2.0 20.0
8 C NaN 0.0
9 C NaN 0.0
10 C NaN 0.0
11 C NaN 30.0