【问题标题】:Pandas DataFrame: Collect Column Values to one RowPandas DataFrame:将列值收集到一行
【发布时间】:2018-08-26 17:51:50
【问题描述】:

我有这张表,主要问题是ID ,W_WeightClass 列的长度不同

注意:ID 的每个数字都与 Class 相关联,例如 (ID 0Class 1.0ID 4Class 5.0

   ID   W_Weight    Class

0   0   0.255265    1.0
1   0   0.273844    1.0
2   0   0.351219    1.0
3   0   0.262033    1.0
4   0   0.351219    5.0
5   0   0.258109    1.0
6   0   0.296328    5.0
7   0   0.351219    1.0
8   0   0.301208    1.0
9   0   0.273844    1.0
10  0   0.317767    1.0
11  1   0.299451    1.0
12  1   0.327183    5.0
13  1   0.391577    1.0
14  1   0.272526    1.0
15  1   0.412015    1.0
16  1   0.412015    1.0
17  1   0.287148    1.0
18  1   0.168667    5.0
19  1   0.257689    1.0
20  1   0.242609    1.0
21  2   0.190351    5.0
22  2   0.204205    5.0
23  2   0.254588    5.0
24  2   0.261904    1.0
25  2   0.195398    5.0
26  2   0.248913    5.0
27  2   0.161089    1.0
28  2   0.240355    5.0
29  2   0.261904    1.0
... ... ... ...
410722  32742   0.190023    NaN
410723  32742   0.190023    NaN
410724  32742   0.184970    NaN
410725  32742   0.166998    NaN
410726  32742   0.196789    NaN
410727  32742   0.171033    NaN
410728  32742   0.207060    NaN
410729  32742   0.171033    NaN
410730  32742   0.179186    NaN
410731  32742   0.207060    NaN
410732  32742   0.182852    NaN
410733  32742   0.146492    NaN
410734  32742   0.141293    NaN
410735  32742   0.193123    NaN
410736  32742   0.207060    NaN
410737  32742   0.092576    NaN
410738  32742   0.207060    NaN
410739  32742   0.160762    NaN
410740  32742   0.165249    NaN
410741  32742   0.207060    NaN
410742  32742   0.184970    NaN
410743  32742   0.147506    NaN
410744  32742   0.207060    NaN
410745  32742   0.190023    NaN
410746  32742   0.116286    NaN
410747  32742   0.070032    NaN
410748  32742   0.207060    NaN
410749  32742   0.166998    NaN
410750  32742   0.147506    NaN
410751  32742   0.207060    NaN

想要的表格应该是这样的

注意:索引为 0 的第一行只是一个例子,我想做 这适用于W_Weight 列中的所有数据

   ID                  W_Weight                                 Class
0   0   {0.25,0.27,0.35,0.26,0.35,0.25,0.29,0.35,0.30,0.27,0.31} 1.0
11  1   0.299451                                                 1.0
12  1   0.327183                                                 5.0
13  1   0.391577                                                 1.0
14  1   0.272526                                                 1.0
15  1   0.412015                                                 1.0
16  1   0.412015                                                 1.0
17  1   0.287148                                                 1.0
18  1   0.168667                                                 5.0
19  1   0.257689                                                 1.0
20  1   0.242609                                                 1.0
21  2   0.190351                                                 5.0
22  2   0.204205                                                 5.0
23  2   0.254588                                                 5.0
24  2   0.261904                                                 1.0
25  2   0.195398                                                 5.0
26  2   0.248913                                                 5.0
27  2   0.161089                                                 1.0
28  2   0.240355                                                 5.0
29  2   0.261904                                                 1.0

我这样做是为了将 ClassID and W_Weight 匹配,因为我正在使用 TensorFlow 进行分类

【问题讨论】:

  • 你为什么要做出如此适得其反的事情?这将导致对象列并杀死所有性能/效率。
  • 想要Class分组并聚合W_Weight并没有错。但不要将此结构存储在数据框中。还有其他数据类型(例如dict)可用于实现此目的。如果您考虑到这一点重新表述您的问题,那么有一个简单的解决方案。
  • 如果你真的想试试df.groupby('ID').apply(set)
  • 在您的示例中,ID==0 与两个类相关联:1.0 和 5.0,这与您的注释相矛盾。请澄清。
  • 根据您以后要执行的操作,将集合存储为数组可能会更好,在这种情况下,您需要df.groupby('ID')['W_Weight'].unique(),这样您至少可以索引元素。跨度>

标签: python python-3.x pandas numpy tensorflow


【解决方案1】:

你被正确地建议不要做你试图做的事情。尽管如此,如果您坚持,这里有一个解决方案:

df.groupby('ID')['W_Weight'].apply(set)
#ID
#0    {0.255265, 0.351219, 0.25810900000000003, 0.26...
#1    {0.299451, 0.327183, 0.27252600000000005, 0.39...

【讨论】:

  • 作为一个琐碎的补充,可以在最后加上.to_dict(),把它转成字典,可能更适合后续操作。
猜你喜欢
  • 1970-01-01
  • 2020-03-04
  • 1970-01-01
  • 2022-09-30
  • 2017-02-15
  • 2016-09-02
  • 2020-02-01
  • 2016-03-26
相关资源
最近更新 更多