Python Pandas复制并更新DataFrame行

时间:2018-09-12 11:39:46

标签: python-3.x pandas

我有一个看起来像这样的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   

我该怎么做?

1 个答案:

答案 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