Sco*_*les 2 python dataframe pandas
在这种情况下,我想基于列的值复制或复制DataFrame的行orig_qty。因此,如果我有一个DataFrame并使用pandas==0.24.2:
import pandas as pd
d = {'a': ['2019-04-08', 4, 115.00], 'b': ['2019-04-09', 2, 103.00]}
df = pd.DataFrame.from_dict(
d,
orient='index',
columns=['date', 'orig_qty', 'price']
)
Run Code Online (Sandbox Code Playgroud)
>>> print(df)
date orig_qty price
a 2019-04-08 4 115.0
b 2019-04-09 2 103.0
Run Code Online (Sandbox Code Playgroud)
因此,在上面的示例中,with的行orig_qty=4应重复4次,而with的行orig_qty=2应重复2次。经过这种转换后,我想要一个看起来像这样的DataFrame:
>>> print(new_df)
date orig_qty price fifo_qty
1 2019-04-08 4 115.0 1
2 2019-04-08 4 115.0 1
3 2019-04-08 4 115.0 1
4 2019-04-08 4 115.0 1
5 2019-04-09 2 103.0 1
6 2019-04-09 2 103.0 1
Run Code Online (Sandbox Code Playgroud)
注意,我并不真正关心转换后的索引。我可以详细说明用例,但实际上我正在做一些FIFO记帐,其中的值之间可能发生重要变化orig_qty。
使用Index.repeat,DataFrame.loc,DataFrame.assign和DataFrame.reset_index
new_df = df.loc[df.index.repeat(df['orig_qty'])].assign(fifo_qty=1).reset_index(drop=True)
Run Code Online (Sandbox Code Playgroud)
[输出]
date orig_qty price fifo_qty
0 2019-04-08 4 115.0 1
1 2019-04-08 4 115.0 1
2 2019-04-08 4 115.0 1
3 2019-04-08 4 115.0 1
4 2019-04-09 2 103.0 1
5 2019-04-09 2 103.0 1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
390 次 |
| 最近记录: |