在pandas df中添加具有重复值序列的列

时间:2019-08-01 17:44:39

标签: python pandas

我想向一列具有int甚至str序列的pandas DataFrame添加一个列。

这是熊猫DataFrame:

import pandas as pd

df = [{"us": "t1"},
{"us": "t2"},
{"us": "t3"},
{"us": "t4"},
{"us": "t5"},
{"us": "t6"},
{"us": "t7"},
{"us": "t8"},
{"us": "t9"},
{"us": "t10"},
{"us": "t11"},
{"us": "t12"}
    ]
df = pd.DataFrame(df)
df

我只想像这样添加int或str列表的列:

list_int = [1, 2, 3, 4]

list_str = ['one','two','three','four']

当然,由于长度,代码df['list_int']=list_int无法正常工作。

输出应为:

    us   list_int  list_str
0   t1      1        one
1   t2      2        two
2   t3      3        three
3   t4      4        four
4   t5      1        one
5   t6      2        two
6   t7      3        three
7   t8      4        four
8   t9      1        one
9   t10     2        two
10  t11     3        three
11  t12     4        four

4 个答案:

答案 0 :(得分:3)

您可以使用np.tile

df['list_int'] = np.tile(list_int, len(df)//len(list_int) + 1)[:len(df)]

或者简单地

df['list_int'] = np.tile(list_int, len(df)//len(list_int)]

如果len(df)len(list_int)整除。

答案 1 :(得分:1)

让我们做一些新的np.put

df['list_int']=''
df['list_str']=''
np.put(df.list_str,np.arange(len(df)),list_str)
np.put(df.list_int,np.arange(len(df)),list_int)


df
Out[83]: 
     us list_int list_str
0    t1        1      one
1    t2        2      two
2    t3        3    three
3    t4        4     four
4    t5        1      one
5    t6        2      two
6    t7        3    three
7    t8        4     four
8    t9        1      one
9   t10        2      two
10  t11        3    three
11  t12        4     four

答案 2 :(得分:0)

将列表与数字n相乘会重复该列表n次。

2 * ['one', 'two', 'three'] 

等于

['one', 'two', 'three', 'one', 'two', 'three']

因此,如果您的数据框是df,而您的代码段是s=['one', 'two', 'three'],则可以按以下方式构建列:

col = (len(df) % len(s)) * s + s[:int(len(df) / len(s))]

答案 3 :(得分:0)

尝试一下-可能不是最好的通用选项,但是它可以起作用...

df["list_str"]=np.array(list_str)[df["us"].index.values%4]
df["list_int"]=np.array(list_int)[df["us"].index.values%4]

输出


    us  list_str    list_int
0   t1  one         1
1   t2  two         2
2   t3  three       3
3   t4  four        4
4   t5  one         1
5   t6  two         2
6   t7  three       3
7   t8  four        4
8   t9  one         1
9   t10 two         2
10  t11 three       3
11  t12 four        4