【问题标题】:how can I create a data frame containing all the combinations of a column?pandas python?如何创建包含列的所有组合的数据框?pandas python?
【发布时间】:2018-12-20 12:13:35
【问题描述】:

如何使用 pandas python 在数据框中创建包含特定组(例如用户 ID)的所有组合列(例如使用)值的数据框?

例如: 如果这是我拥有的数据框,

user-id      serial-number       value     day

1   2   10      1
1   2   20      2
1   2   30      3
1   2   40      4
1   2   50      5
1   2   60      6
1   2   70      7
1   2   80      8
1   2   90      9
1   2   100    10
1   2   200    11
1   2   300    12
1   2   400    13
2   3   11      1
2   3   12      2
2   3   13      3
2   3   14      4
2   3   15      5
2   3   16      6
2   3   17      7
2   3   18      8

我需要生成的数据框是: (“值”列中第一个值的组合)

user-id     serial-number       value       value1      day

1   2   10  10    1
1   2   10  20    1
1   2   10  30    1
1   2   10  40    1
1   2   10  50    1
1   2   10  60    1
1   2   10  70    1
1   2   10  80    1
1   2   10  90    1 
1   2   10  100   1 
1   2   10  200   1 
1   2   10  300   1
1   2   10  400   1
.
.
.

2   3   11  11    1
2   3   11  12    1
2   3   11  13    1
2   3   11  14    1
2   3   11  15    1
2   3   11  16    1
2   3   11  17    1
2   3   11  18    1

同样,我想对“值”列中的所有值执行此操作。

有什么建议吗?

【问题讨论】:

  • 对不起,示例不清楚。基本上我需要将行添加到数据框中,其中包含数据框中特定列值的所有组合!
  • 您可以通过在每行的开头添加四个空格来将表格打印为预先格式化的文本;查看格式化帮助以获取详细信息。我会为您编辑它,但您的第一个表格似乎也缺少一列。
  • 是否要从第一个数据框的值列复制到第二个数据框的值列?或者问题是什么。好像不清楚....
  • 现在我猜数据集和预期的输出清楚了吗?
  • 我从某人那里得到了解决方案,但现在没有,有人可以解释一下为什么吗?

标签: python pandas pandas-groupby


【解决方案1】:
subset = pd.DataFrame()

for _, i in test1.groupby(['user-id']):

                vals = i['value']
                val, val1 = zip(*product(vals, vals))
                vals_len = len(vals)

                def elongate(s, k):

                    return pd.concat([s] * k, ignore_index=True)

                res = pd.DataFrame({'user-id': i['user-id'].pipe(elongate, vals_len),
                                    'serial-number': i['serial-number'].pipe(elongate, vals_len),
                                    'value': i['value'].pipe(elongate, vals_len),
                                    'day': i['day'].pipe(elongate, vals_len),
                                    'value': val,
                                    'value1': val1
                                   })


                subtest = subtest.append(res)


print(subtest)

这对我来说非常有用。

【讨论】:

  • 这适用于较小的数据集,但对于具有 220625 条记录的数据集,它非常慢。任何更好的快速解决方案都非常感谢。有什么建议吗?
猜你喜欢
  • 2017-09-06
  • 1970-01-01
  • 2018-06-17
  • 2021-07-19
  • 1970-01-01
  • 1970-01-01
  • 2021-04-13
相关资源
最近更新 更多