我有一個這樣的數據框:Time Name Value2007Q1 A 302007Q2 A 352007Q3 A 28...2007Q1 B 312007Q2 B 502007Q3 B 60...2007Q1 C 202007Q2 C 152007Q3 C 30我想添加另一個名為結果的列,并在每個名稱的每一行之間執(zhí)行計算。我想使用一個季度的值除以上一季度的值,然后減去 1,這類似于Value(Q2)/Value(Q1)-1。另外,我想按名稱分組,只在具有相同名稱的行內進行計算。結果應該是這樣的:Time Name Value Results2007Q1 A 30 2007Q2 A 35 0.16672007Q3 A 28 -0.2...2007Q1 B 31 2007Q2 B 50 0.61292007Q3 B 60 0.2...2007Q1 C 202007Q2 C 15 -0.252007Q3 C 30 1每個“名稱”的開始時間段不應具有結果值。感謝所有能提供幫助的人!
1 回答

蕪湖不蕪
TA貢獻1796條經驗 獲得超7個贊
使用DataFrame.groupby
onName
并使用groupby.shift
移動列Value
然后使用Series.div
將其除以Value
,最后使用Series.sub
減去1
:
df['Results']?=?df['Value'].div(df.groupby('Name')['Value'].shift()).sub(1)
結果:
print(df)
? ? ?Time Name? Value? ?Results
0? 2007Q1? ? A? ? ?30? ? ? ?NaN
1? 2007Q2? ? A? ? ?35? 0.166667
2? 2007Q3? ? A? ? ?28 -0.200000
3? 2007Q1? ? B? ? ?31? ? ? ?NaN
4? 2007Q2? ? B? ? ?50? 0.612903
5? 2007Q3? ? B? ? ?60? 0.200000
6? 2007Q1? ? C? ? ?20? ? ? ?NaN
7? 2007Q2? ? C? ? ?15 -0.250000
8? 2007Q3? ? C? ? ?30? 1.000000
添加回答
舉報
0/150
提交
取消