Python 在pandas中创建常量列
各位,你们知道我如何在数据框中创建一列,每个帐户都有第一个观察值吗?例如:Python 在pandas中创建常量列,python,pandas,dataframe,Python,Pandas,Dataframe,各位,你们知道我如何在数据框中创建一列,每个帐户都有第一个观察值吗?例如: Account | Month | Debt_left Acc1 | 0 | -100 Acc1 | 1 | -90 Acc2 | 0 | -120 Acc2 | 1 | -110 To become: Account | Month
Account | Month | Debt_left
Acc1 | 0 | -100
Acc1 | 1 | -90
Acc2 | 0 | -120
Acc2 | 1 | -110
To become:
Account | Month | Debt_left | initial_debt
Acc1 | 0 | -100 | -100
Acc1 | 1 | -90 | -100
Acc2 | 0 | -120 | -120
Acc2 | 1 | -110 | -120
您需要在之后重命名列,但这样做可以:
import pandas as pd
df = pd.DataFrame( {"Account" : ["Acc1","Acc1","Acc2","Acc2"],
"Month" : [0,1,0,1],
"Debt_left" : [-100,-90,-120,-110]})
pd.merge( df, df.groupby('Account').first(), how = "inner", on="Account" )[["Account","Month_x","Debt_left_x","Debt_left_y"]]
你确信你的例子有意义吗?每个帐户的第一次观察应仅产生2行。解决方案假定df按帐户和月份排序。这是真的吗?是的,是真的。我所做的是首先创建一个新的df[first=df.groupby'Account'['debt\u left'].first]为每个帐户提供第一个条目,然后在现有的数据框架上加入它:[first=first.set\u index'Account'][df.set\u idex'Account.joinfirst,rsuffix='u first']谢谢!我用一个左连接创建了一个新的数据帧,但是您的解决方案要干净得多。谢谢。
# Assuming that the debt_left does not increase
import io
import pandas as pd
data = io.StringIO('''
Account | Month | Debt_left
Acc1 | 0 | -100
Acc1 | 1 | -90
Acc2 | 0 | -120
Acc2 | 1 | -110
''')
df = pd.read_csv(data, sep='|')
df.columns = df.columns.str.strip()
mapper = df.set_index('Month').groupby('Account')['Debt_left'].min().to_dict()
df['init_value'] = df['Account'].map(mapper)
print(df)