首页 > 解决方案 > 熊猫适用于未知列

问题描述

我有以下数据框:

position     a_0     a_1     a_2     a_3     a_4     new_value
2             10     13                                100
3             12     16       13                       120
2             14     12                                140
4             15     11       16      16               150

我想创建以下内容:

position     a_0     a_1     a_2     a_3     a_4     new_value
2             10     13      100                       100
3             12     16       13     120               120
2             14     12      140                       140
4             15     11       16      16     150       150

本质上,将索引处的每一行设置position为等于new_value。理想情况下不使用 for 循环。

困难在于引用不同的列来为每一行设置一个值。我唯一的想法是将原始数据帧分解为更小的数据帧(基于 的值position),然后使用该apply函数。

任何其他想法都会非常有帮助!

谢谢

标签: pythonpython-3.xpandas

解决方案


从您的数据来看,尚不清楚空白单元格是np.nan还是空字符串'',以及数据类型是什么。Aprint(df.to_dict())本来可以更好。也就是说,让我们假设这些是空字符串''

# only work on interested column
s = df.loc[:,'a_0':'a_4']

# use `s.isna()` if they are `None` or `NaN`
df.loc[:, 'a_0':'a_4'] = np.where(s.eq('').cumsum(1).eq(1), 
                                  df['new_val'].values[:,None],s)

输出:

   position  a_0  a_1    a_2  a_3  a_4  new_val
0         2   10   13  100.0                100
1         3   12   16   13.0  120           120
2         2   14   12  140.0                140
3         4   15   11   16.0   16  150      150

推荐阅读