我想基于不同行中另一个单元格的值来更新一个单元格中的值。
我的数据框如下:
OrderId OrderType Exch
P_001 P NYSE
P_001_1 C | |
P_002 P |CHIX|
P_002_1 C | |
P_002_2 C | |
我希望结果是
OrderId OrderType Exch
P_001 P |NYSE|
P_001_1 C |NYSE|
P_002 P |CHIX|
P_002_1 C |CHIX|
P_002_2 C |CHIX|
我可以使用.loc
更新相同的行,但是无法在Pandas数据框中找到任何解决方案来进行此类更新。
当我问这个问题时,我尝试拆分订单ID并在数据框中搜索以更新Exch值。
答案 0 :(得分:1)
如果缺少不存在的值,请使用前向填充缺少的值:
df['Exch'] = df['Exch'].ffill()
或将Series.str.split
用于新的DataFrame
,并按第一列和第二列与GroupBy.transform
和GroupBy.first
分组:
df1 = df['OrderId'].str.split('_', expand=True)
df['Exch'] = df.groupby([df1[0], df1[1]])['Exch'].transform('first')
print (df)
OrderId OrderType Exch
0 P_001 P NYSE
1 P_001_1 C NYSE
2 P_002 P CHIX
3 P_002_1 C CHIX
4 P_002_2 C CHIX
另一个想法是使用P
获取行,创建Series和map
:
s = df[df['OrderType'].eq('P')].set_index('OrderId')['Exch']
df['Exch'] = df['OrderId'].str.rsplit('_', n=1).str[0].map(s).fillna(df['Exch'])
print (df)
OrderId OrderType Exch
0 P_001 P NYSE
1 P_001_1 C NYSE
2 P_002 P CHIX
3 P_002_1 C CHIX
4 P_002_2 C CHIX
答案 1 :(得分:0)
df= df.ffill(axis = 0)
print(df)
a b c
0 P_001 P NYSE
1 P_001_1 C None
2 P_002 P CHIX
3 P_002_1 C None
4 P_002_2 C None
a b c
0 P_001 P NYSE
1 P_001_1 C NYSE
2 P_002 P CHIX
3 P_002_1 C CHIX
4 P_002_2 C CHIX
如果您想在while日期集中这样做。