【问题标题】:How to duplicate each row in a Pandas dataframe?如何复制 Pandas 数据框中的每一行?
【发布时间】:2021-07-03 08:56:42
【问题描述】:

假设我有一个看起来像这样的数据框:

Metric 1 Metric 2 Stat 1 Stat 2 Other Val
5 10 15 20 Z
3 6 9 12 X

我想将每一行分成两部分,按公制分隔,其他所有列都保持不变。例如:

Metric 1 Metric 2 Stat 1 Stat 2 Other Val
5 NaN 15 NaN Z
NaN 6 NaN 12 X
5 NaN 15 NaN Z
NaN 6 NaN 12 X

我最初的想法是手动复制每一行,然后将指标一一设置为 NaN,但我不确定这是否是最好的方法。至少,我如何遍历数据框并复制每一行?我想将每一行加倍,副本显示在每行的正下方。

【问题讨论】:

  • Stat 在预期输出中也有 NaN 值。它是基于以1 和2 等结尾的列,还是有其他一些间距规则?
  • 是的,它只是基于被命名为 1 和 2 的列。我希望一行只有关于项目 #1 的信息,然后有一个重复的行只有关于项目 #2 的信息.我希望所有未标记为“1”或“2”的列在原始列和副本中都相同。基本上复制该行并将所有“1”列设置为 NaN,然后​​在副本中将所有“2”列设置为 NaN。我想对每一行都这样做。
  • “其他 Val”是否与您想要 metric/stat 1 还是 2 有任何关联? E.I 应该 Z 始终与 metric/stat 1 相关联

标签: python pandas dataframe


【解决方案1】:

不太确定需要哪些值背后的逻辑。所以这与你的输出不匹配,但可能会让你朝着你想去的方向前进:

df_list = []

for x in [2,1]:
    dfx = df.copy()
    dfx[dfx.filter(like=f' {x}').columns] = np.nan
    df_list.append(dfx)
    
pd.concat(df_list).sort_index()

结果:

   Metric 1   Metric 2   Stat 1   Stat 2  Other Val
0        5.0        NaN     15.0      NaN         Z
0        NaN       10.0      NaN     20.0         Z
1        3.0        NaN      9.0      NaN         X
1        NaN        6.0      NaN     12.0         X

【讨论】:

    猜你喜欢
    • 2020-05-11
    • 1970-01-01
    • 1970-01-01
    • 2020-05-19
    • 1970-01-01
    • 2019-10-20
    • 2019-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多