【问题标题】:Insert row into dataframe based on value in a specified column根据指定列中的值将行插入数据框中
【发布时间】:2019-04-13 06:11:26
【问题描述】:

不确定这是否可能,但是当“策略”列中的值发生变化时,我正在尝试将数据框的标题插入新行。

电流输出:

Amount Code Strategy
1,000 Fund_1 A
2,000 Fund_2 A
3,000 Fund_1 B
4,000 Fund_2 B
5,000 Fund_1 C
6,000 Fund_2 C

期望的输出:

Amount Code Strategy
1,000 Fund_1 A
2,000 Fund_2 A
Amount Code Strategy
3,000 Fund_1 B
4,000 Fund_2 B
Amount Code Strategy
5,000 Fund_1 C
6,000 Fund_2 C

有没有简单的方法可以做到这一点?

【问题讨论】:

  • 这里添加标题没有意义,它也会影响 Amount 的数字类型。如果您考虑按策略拆分数据帧,那将是一个不同的问题
  • 数据框将被输出到一个 excel 文件中,有人将在该文件中将数据复制并粘贴到模板中。问题在于,对于每个策略,都需要将数据复制到新模板中(因此需要标头)。 Amount 的数字类型将受到影响这一事实应该不是什么大问题,因为一旦我输出到 Excel,我将不会对此数据帧执行任何其他数据操作。有没有更好的方法来解决这个问题?
  • 您可以根据策略创建字典或数据框列表,并将列表读取到excel。见thisthis
  • 您可以轻松地为不同的excel文件或同一个excel文件的不同工作表编写不同的策略。在 excel 中,即使在同一个工作表中,如果需要,也可以仅过滤到一种策略。
  • 感谢 Vaishali。我会试试这个

标签: python pandas


【解决方案1】:

这是使用reindexingpandas.concat 实现此效果的一种方法:

d = {x:x for x in df.columns}

header_rows = df.drop_duplicates('Strategy').drop(0).assign(**d)
header_rows.index -= 0.5

df_new = pd.concat([df, header_rows]).sort_index().reset_index(drop=True)
print(df_new)

   Amount    Code  Strategy
0   1,000  Fund_1         A
1   2,000  Fund_2         A
2  Amount    Code  Strategy
3   3,000  Fund_1         B
4   4,000  Fund_2         B
5  Amount    Code  Strategy
6   5,000  Fund_1         C
7   6,000  Fund_2         C

【讨论】:

  • @jrass 很高兴它有帮助:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-30
  • 1970-01-01
相关资源
最近更新 更多