sat*_*ato 8 python dataframe pandas
我有熊猫数据框:
df = pd.DataFrame()
df['city'] = ['NY','NY','LA','LA']
df['hour'] = ['0','12','0','12']
df['value'] = [12,24,3,9]
city hour value
0 NY 0 12
1 NY 12 24
2 LA 0 3
3 LA 12 9
Run Code Online (Sandbox Code Playgroud)
我想,对于每个城市,将每一行除以前一行并将结果写入一个新的数据帧。所需的输出是:
city ratio
NY 2
LA 3
Run Code Online (Sandbox Code Playgroud)
什么是最pythonic的方式来做到这一点?
首先除以shift每组的ed 值:
df['ratio'] = df['value'].div(df.groupby('city')['value'].shift(1))
print (df)
city hour value ratio
0 NY 0 12 NaN
1 NY 12 24 2.0
2 LA 0 3 NaN
3 LA 12 9 3.0
Run Code Online (Sandbox Code Playgroud)
然后删除NaNs 并仅选择city和ratio列:
df = df.dropna(subset=['ratio'])[['city', 'ratio']]
print (df)
city ratio
1 NY 2.0
3 LA 3.0
Run Code Online (Sandbox Code Playgroud)
您可以使用pct_change:
In [20]: df[['city']].assign(ratio=df.groupby('city').value.pct_change().add(1)).dropna()
Out[20]:
city ratio
1 NY 2.0
3 LA 3.0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7395 次 |
| 最近记录: |