【问题标题】:Convert pandas column to a list in specific positions将 pandas 列转换为特定位置的列表
【发布时间】:2020-02-10 19:53:25
【问题描述】:

我有一张 Excel 数字表。这些是我固定的可能读数。有数百个。我有所有可能读数的数据,不幸的是没有运行数字。如果您进一步阅读,该职位很重要。

示例表,位置不变:

         Readings
0        1111        
1        1234
2        1243
3        9999
4        1237
5        1412
 ...
999      8878

现在我必须在星期一阅读新的阅读材料,比如说 5 个(实际上更多,但为简单起见,是 5 个)。

熊猫数据框:

       Taken
0     9999
1     9999
2     1237
3     8878
4     1412

我喜欢将它们表示为显示出现次数的列表。 X 如果出现 X 次,则为 0。因此,这 5 个读数将是:

[0,0,0,2,1,1,1,....0]

有没有办法做到这一点?

【问题讨论】:

  • 关于你想要什么的最后一部分不清楚@JT。你是怎么得到预期结果的?
  • 这有点像一个热门。如果你看到我的读数,第一和第二个是 9999。这对应于我工作表的索引 3。因此我的列表 [0,0,0,2...]。同样,读数 3 是 1237,对应于我工作表的位置 4。因此 [0,0,02,1,...]。谢谢。
  • 所以你想找出输入数据中每个元素的出现次数w.r.t。原始数据索引。正确吗?
  • 听起来不错。我的参考表中每次阅读的出现次数。如果没有这样的读数,它仍然必须显示为零。
  • 原始数据中的元素也是唯一的吗?原始表格中的每个数字只会出现一次?

标签: python pandas keras


【解决方案1】:

此代码可能是解决您的问题的好方法:

import pandas as pd
df1 = pd.DataFrame({"Readings":[1111,1234,1243,9999,1237,1412,8878]})
df2 = pd.DataFrame({"Taken":[9999,9999,1237,8878,1412]})

def checkOcurrance(val):
    count = 0
    try:
        count = df2["Taken"].value_counts()[val]
    except:
        pass
    return count

df1["Ocurrance"] = df1["Readings"].apply(checkOcurrance)

那么 df1 会导致:

>>> df1
   Readings  Ocurrance
0      1111          0
1      1234          0
2      1243          0
3      9999          2
4      1237          1
5      1412          1
6      8878          1

您可以将列 Ocurrance 传递给 list 以最终获得您的列表,如下所示:

out = df1["Ocurrance"].tolist()

导致:

>>> out
[0L, 0L, 0L, 2L, 1L, 1L, 1L]

【讨论】:

  • Cedric 实际上我可以换一种方式。我觉得这不是很有效。
  • Cedric 实际上我可以换一种方式来考虑滚动窗口而不运行 for 循环吗?我的思路是 df1["Ocurrance"] = df['readings']。 rolling(min_periods=3, window=3).apply(check_occurance).tolist() 你有什么想法吗?
  • 我完全不明白你的问题。我提供的解决方案没有使用 for 循环。如果您认为这对您的问题有帮助,请考虑批准/支持该问题。干杯。
猜你喜欢
  • 2017-12-19
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 2021-06-22
  • 2021-03-01
  • 2013-02-13
  • 1970-01-01
  • 2019-11-28
相关资源
最近更新 更多