我想知道是否有人可以帮助我设计熊猫风格。我正在尝试对熊猫中的数据组进行操作,如以下示例所示。
import pandas as pd
df = pd.DataFrame({
'idprod': [1, 1, 1, 1, 2, 2, 2],
'optn': [1, 2, 3, 4, 1, 2, 3],
'keep': ['a', 'a', 'a', 'a', 6, 6, 6],
'bla': [7, 6, 5, 4, 0, 9, 8],
'val': [500, 850, 1100, 1150, 1500, 2500, 4500]})
print(df)
def addtrf(g):
g.set_index('optn', inplace=True)
d = g.loc[3, 'val'] - g.loc[1, 'val']
try:
d2 = g.loc[4, 'val'] - g.loc[1, 'val']
except:
d2=0
g.reset_index(inplace=True)
n = g.loc[g.optn == 3, :]
n['val'] = d
n['optn'] = 'diff1'
del n['bla']
g = g.append(n)
n = g.loc[g.optn == 4, :]
n['val'] = d2
n['optn'] = 'diff2'
del n['bla']
g = g.append(n)
#print(g)
return (g)
dfn = df.groupby('idprod').apply(addtrf)
dfn=dfn.drop(columns='idprod')
dfn=dfn.reset_index()
dfn = dfn.drop(columns='level_1')
print(dfn)
因此,这实际上做了应做的事情,但是,我认为这不是一种很好的方法。您能帮我简化一下吗? 我不想使用循环。我还研究了使用.diff()的方法,但我可能需要做的不仅仅是减号,还需要保留一些列(保留),而删除其他列(bla)。因此类似于此答案下面的https://stackoverflow.com/users/8081945/babz问题:https://stackoverflow.com/a/57378481/13878458
任何帮助,不胜感激! PS:这对我的数据集来说非常慢,而且我还必须手动删除从reset_index中获取的level_1列