我想向一列具有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
答案 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