我有一个看起来像这样的DataFrame:
raw_data = {
'name': ['Name1', 'Name2'],
'zone': ['zone1','zone2']}
df = pd.DataFrame(raw_data, columns = ['value','name','zone'])
print(df)
value name zone
0 NaN Name1 zone1
1 NaN Name2 zone2
我必须用一个列表更新DataFrame,以便每一行都与列表中的每个值重复:
update_values = ['a1', 'a2']
# The desired dataframe looks like:
value name zone
0 a1 Name1 zone1
1 a1 Name2 zone2
2 a2 Name1 zone1
3 a2 Name2 zone2
我该怎么做?
答案 0 :(得分:1)
将concat
与参数keys
一起使用-它会创建MultiIndex
,因此必不可少的DataFrame.reset_index
用于列:
df = (pd.concat([df.drop('value', axis=1)] * len(update_values), keys=update_values)
.reset_index(level=1, drop=True)
.rename_axis('value')
.reset_index())
print(df)
value name zone
0 a1 Name1 zone1
1 a1 Name2 zone2
2 a2 Name1 zone1
3 a2 Name2 zone2
或通过numpy.tile
重复值:
update_values = ['a1', 'a2', 'a3']
df1 = pd.concat([df] * len(update_values), ignore_index=True)
df1['value'] = np.tile(update_values, len(df))
print(df1)
value name zone
0 a1 Name1 zone1
1 a2 Name2 zone2
3 a3 Name1 zone1
4 a1 Name2 zone2
5 a2 Name1 zone1
6 a3 Name2 zone2