Python3,在pandas数据帧中添加不同数量的列

时间:2017-03-17 08:54:09

标签: python python-3.x pandas dataframe

我有一个2个初始列col1和col2的数据框。我想根据名为y的列表中的值添加更多列。要点是len(y)是变化的。

import numpy as np
import pandas as pd

class Banana:
    def __init__(self):
        self.val1 = None
        self.Val2 = None
        self.name = None

b_a = Banana()
b_b = Banana()
b_c = Banana()
bananas = list()

# step 1: data preparation
case_dependent_value = 3
v1 = 1
v2 = np.arange(case_dependent_value)

b_a.val1 = v1
b_a.val2 = v2
b_a.name = 'b_a'

b_b.val1 = v1
b_b.val2 = v2
b_b.name = 'b_b'

b_c.val1 = v1
b_c.val2 = v2
b_c.name = 'b_c'

bananas.append(b_a)
bananas.append(b_b)
bananas.append(b_c)

# step 2: make dataframe
values_1 = list()
names = list()
for each_banana in bananas:
    values_1.append(each_banana.val1)
    names.append(each_banana.names)

df = pd.DataFrame({'values_1': values_1, 'names': names})

生成的df是:

    names | values_1
0    b_a  |  1
1    b_b  |  1
2    b_c  |  1

现在我想将对象的val2 b_a,b_b,b_c添加为df中的列。关键是val2的大小随着不同的情况而变化。但每种情况下,大小都是已知的,就像它的例子那样3.所以结果应该是

    names | values_1 | values_2_1 | values_2_2 | values_2_3
0    b_a  |   1      |    0       |     1      |   2
1    b_b  |   1      |    0       |     1      |   2
2    b_c  |   1      |    0       |     1      |   2

你能告诉我如何实现它吗?感谢

1 个答案:

答案 0 :(得分:2)

如果预先知道要创建的列数的大小,那么您可以使用DF.assign()dictionary unpacking的帮助下动态地将列分解到其函数调用中,如下所示:

# consider a given size
size = 3
# generate column names with incremental ranges
cols = ["value_2_{}".format(item) for item in range(1,size+1)]
# map the column names and it's corresponding value to a dict object
df.assign(**dict(zip(cols, range(size))))

enter image description here