Python 在apply()lambda中需要两列时,在多索引数据帧上添加groupby()
我有一个多索引数据框,我想在其中创建一个新列。在此新列中,该特定索引的所有行的值应来自“type”为“TX”的行中“bin”列的值。例如:Python 在apply()lambda中需要两列时,在多索引数据帧上添加groupby(),python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,我有一个多索引数据框,我想在其中创建一个新列。在此新列中,该特定索引的所有行的值应来自“type”为“TX”的行中“bin”列的值。例如: From... type bin id desc 1 a TX 01110010 a RX 01110010 b TX 11110000 b RX 11110000 2
From...
type bin
id desc
1 a TX 01110010
a RX 01110010
b TX 11110000
b RX 11110000
2 a RX 11101000
b TX 11110001
b RX 11110001
What I want...
type bin bin_tx
id desc
1 a TX 01110010 01110010
a RX 00000010 01110010
b TX 11110000 11110000
b RX 11110000 11110000
2 a RX 11101000
b TX 00110001 00110001
b RX 11110001 00110001
What I get...
type bin bin_tx
id desc
1 a TX 01110010 NaN
a RX 01110010 NaN
b TX 11110000 NaN
b RX 11110000 NaN
2 a RX 11101000 NaN
b TX 11110001 NaN
b RX 11110001 NaN
我的问题是,当我尝试在groupby上使用apply()时,列“bin_tx”对于所有行返回为NaN。我想这与熊猫不知道如何处理groupby和原始df之间的不同指数有关
但是,如果我尝试使用transform(),这当然会一次处理一列,也就是说,我无法从“bin”列获取值
MWE:
修正你的代码
s=df3.groupby(level=[0,1]).apply(lambda x: x.bin.values[0] if (x.type == 'TX').any() else '')
out=df3.join(s.to_frame('binTX'),how='left')
type bin binTX
id desc
1 a TX 01110010 01110010
a RX 01110010 01110010
b TX 11110000 11110000
b RX 11110000 11110000
2 a RX 11101000
b TX 11110001 11110001
b RX 11110001 11110001
请解释一下你的代码(你倾向于在你的部分但不是全部(即,IIUC…
)中不这么做),比如你是如何修复OP的代码的。
s=df3.groupby(level=[0,1]).apply(lambda x: x.bin.values[0] if (x.type == 'TX').any() else '')
out=df3.join(s.to_frame('binTX'),how='left')
type bin binTX
id desc
1 a TX 01110010 01110010
a RX 01110010 01110010
b TX 11110000 11110000
b RX 11110000 11110000
2 a RX 11101000
b TX 11110001 11110001
b RX 11110001 11110001