python - Pandas:如何根据另一列中的元素数量增加一列中的元素?
问题描述
我有一个带有 2 个字段的数据框df - subject-percentage和subject-code。
两者都有很多NaN
价值。现在我想确保主题百分比字段中的元素在每行中总计为 100。如果他们不这样做,那么我想在主题百分比字段中添加一个新元素,该元素等于100 - sum(elements in subject-percentage column)
. 这样做,我还想在主题代码列中添加一个虚拟元素(例如“0”),以便在任何时间点,这两个列中的元素数量对于每条记录都是相同的。
这是数据框的示例:
In[1] : df = pd.DataFrame({'subject-percentage':['10;40;40', np.nan,'25;25;50',np.nan,'50;40','20;60'],\
'subject-code':['101;202;303',np.nan,'404;505;606',np.nan,'707;808','909;10010']})
In[2] : df
Out[2]: subject-percentage subject-code
0 10;40;40 101;202;303
1 NaN NaN
2 25;25;50 404;505;606
3 NaN NaN
4 50;40 707;808
5 20;60 909;10010
下面是我用来从subject-percentage中填充缺失元素的代码,以使每行中所有元素的总和等于 100:
In [3]:def make_it_100(values):
arr= []
for value in values.split(';'):
arr.append(int(value))
arr = numpy.array(arr)
if arr.sum() != 100:
corrected_arr = numpy.append(arr, [100 - arr.sum()])
corrected_arr = [str(a) for a in corrected_arr]
return ';'.join(corrected_arr)
else:
return values
In [4]:df.loc[~df['sector-percentage'].isna(), 'subject-percentage'] = df.loc[~df['sector-percentage'].isna(), \
'subject-percentage'].apply(lambda x: make_it_100(x))
但是现在这两列不等于没有。每行中的元素。所以我想要的是在subject-code的长度小于subject-percentage'0'
的长度的行末尾添加 a 。在将这些行切片后,我尝试在主题代码的行末尾进行简单的连接,其中主题代码的长度';0'
的长度小于主题百分比但随后出现'float' object has no attribute 'len'
.
有人可以告诉我一次性完成相同任务的更有效方法吗?任何帮助表示赞赏,谢谢。
解决方案
我会采取以下方法:
遍历数据框的行如果主题百分比不为空:
如果主题百分比的总和不是 100:
连接所需的百分比以使其为 100
连接“;0”到主题代码
执行:
for index, row in df.iterrows():
if pd.isnull(row['subject-percentage']):
continue
total = sum(map(int,row['subject-percentage'].split(';')))
if total != 100:
df.loc[index, 'subject-percentage'] = row['subject-percentage'] + ';{}'.format(100-total)
df.loc[index, 'subject-code'] = row['subject-code'] + ';0'
subject-percentage subject-code
0 10;40;40;10 101;202;303;0
1 NaN NaN
2 25;25;50 404;505;606
3 NaN NaN
4 50;40;10 707;808;0
5 20;60;20 909;10010;0
推荐阅读
- php - WooCommerce:检查购物车中不同购物车商品/ SKU 的数量
- machine-learning - 机器学习模型的部署 - 数据版本控制
- android - 我希望仅在收到实时数据后才调用函数
- c++ - 英特尔集成性能原语傅里叶变换幅度
- database - 什么是存储文件的最佳 nosql 数据库仅包含整数列表
- amazon-dynamodb - DynamoDb 嵌套地图更新
- php - Laravel 7:foreach 循环中未定义的变量
- mongodb - MongoDB Golang 驱动程序尝试连接到 localhost 而不是 docker 主机
- .net - Windows 窗体应用程序设置任务计划程序以运行一些已包含在此应用程序中的类的更好方法是什么?(。网)
- javascript - Googlemaps按类名放置自动完成 - JS循环问题