首页 > 解决方案 > 如何创建一个包含列的所有组合的数据框?pandas python?

问题描述

如何使用 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

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

有什么建议么?

标签: pythonpandaspandas-groupby

解决方案


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)

这对我来说非常有用。


推荐阅读