根据另一个数据框中的数字将项目数量附加到行

Posted

技术标签:

【中文标题】根据另一个数据框中的数字将项目数量附加到行【英文标题】:Appending # of items to row according to number in another dataframe 【发布时间】:2021-06-07 14:46:00 【问题描述】:

这是我想要实现的目标: Result,进程/logical flow

这是第一个数据集的示例: list of symbols

这里是第二个数据集的示例,我将其用作对第一个数据集符号进行分组的参考:reference for grouping

这是我的代码:

stockN = pd.DataFrame(numstocks)
ticker = pd.DataFrame(ticks)

sorts = pd.DataFrame(columns=['Symbols'])

for x in range(len(stockN)):
    if int(stockN[0][x]) < 10:
        sorts.loc[x] = str(ticker[0][:x])
    if int(stockN[0][x]) > 10:
        sorts.loc[x] = str(ticker[0][x:x+10])

我的输出是:

0   Series([], Name: 0, dtype: object)
1   0 GRA\nName: 0, dtype: object
2   2 RL\n3 UNVR\n4 EPC\n5 OI\n6 LEA\nName: 0, dtype: object
3   0 GRA\n1 WRK\n2 RL\nName: 0, dtype: object
4   0 GRA\n1 WRK\n2 RL\n3 UNVR\nName: 0, dtype: object

很明显,传递一个 str() 已经产生了一些问题,但如果我不这样做,这些值就会被 NaN 填充。 那么,为什么我访问的不仅仅是我所指出的内容?

我的下一个问题是切片,您可以从逻辑上看出这是一场灾难,但由于我无法访问 stockN 编号,因此我无法将其添加到我的 x 变量中。我假设我可以逐行创建我的数据框,并用来自ticker [x:x + y]的股票代码填充每一行,其中y = stockN(数量)。然后该值将用于下一次迭代等等。

编辑:忘了提到每行的股票代码最多为 10,因此,例如,如果我的 stockN 编号为 27,我只想要下一个 10,而不是 27。这就是 if/else 和 x+ 的原因10 片。

如果你能帮助我,请告诉我。如果您有更好的方法来解决这个问题,我们也将不胜感激。

【问题讨论】:

【参考方案1】:

我想通了!希望这对寻找类似解决方案的其他人有所帮助,即使这是一个相对基本的问题。

首先,虽然我在上一篇文章中的 nStocks 值显示为数字,但它们实际上是字符串。因此,我通过访问 [0] 处的数据框并将值转换回列表,然后通过列表理解将它们转换为 int 来解决此问题。

sCount = stockN[0].values.tolist()
sCount = [int(i) for i in sCount]

在那之后一切都变得容易了,我没有创建凌乱/复杂的切片方法,而是在访问它们时删除了行(duh)。

symbol = []
for x in range(len(sCount)):
    if sCount[x] <= 10:
        symbol.append(ticker[0][:sCount[x]])
        ticker.drop(ticker.index[:sCount[x]], inplace=True)
        
    if sCount[x] > 10:
        symbol.append(ticker[0][:10])
        ticker.drop(ticker.index[:10], inplace=True)

【讨论】:

以上是关于根据另一个数据框中的数字将项目数量附加到行的主要内容,如果未能解决你的问题,请参考以下文章

从列表框中选择多个项目以附加到电子邮件中

根据插入第一个组合框中的数字生成组合框

如何将列表项附加到数据框中的特定列?

根据数据绑定组合框中的选定项目从访问数据库中删除

ValueError:熊猫数据框中的项目数量错误

使用 for 语句从数据框中附加列表