如何将列表附加到多索引 DataFrame 中的特定行?
index = [("s", "1"),("s", "2"),("s", "3"),("s", "4"),("s", "5"), ("c", "1"),("c", "2"),("c", "3"),("c", "4"),("c", "5")]
multi_index = pd.MultiIndex.from_tuples(index)
df = pd.DataFrame({"I1":[11,12,13,14,15,10,22,33,44,55],"I2":[0,1,2,3,4,5,1,1,1,1]}, index=multi_index)
df
这段代码的结果
I1 I2
s 1 11 0
2 12 1
3 13 2
4 14 3
5 15 4
c 1 10 1
2 22 1
3 33 1
4 44 1
5 55 1
我想在 df.loc["s"].loc['In1'] 中附加列表 x = [16,17,18,19]
得到
I1 I2
s 1 11 0
2 12 1
3 13 2
4 14 3
5 15 4
6 16 NaN
7 17 NaN
8 18 NaN
9 19 NaN
c 1 10 1
2 22 1
3 33 1
4 44 1
5 55 1
我该怎么做?
您可以使用
append()
函数向 DataFrame 添加新行。首先,用你想要附加的值创建一个新的 DataFrame,设置适当的 MultiIndex,然后将它附加到原始 DataFrame。
所以,如果我正确理解您的要求,以下是您需要的代码:
import pandas as pd
index = [("s", "1"),("s", "2"),("s", "3"),("s", "4"),("s", "5"), ("c", "1"),("c", "2"),("c", "3"),("c", "4"),("c", "5")]
multi_index = pd.MultiIndex.from_tuples(index)
df = pd.DataFrame({"I1":[11,12,13,14,15,10,22,33,44,55],"I2":[0,1,2,3,4,5,1,1,1,1]}, index=multi_index)
# Values to be appended
x = [16, 17, 18, 19]
# Create a new DataFrame with the values and appropriate MultiIndex
new_index = [("s", str(i)) for i in range(6, 6+len(x))]
new_multi_index = pd.MultiIndex.from_tuples(new_index)
new_df = pd.DataFrame({"I1": x, "I2": [None] * len(x)}, index=new_multi_index)
# Append the new DataFrame to the original one
result = df.append(new_df)
print(result)
希望以下是您需要的输出:
I1 I2
s 1 11 0
2 12 1
3 13 2
4 14 3
5 15 4
c 1 10 5
2 22 1
3 33 1
4 44 1
5 55 1
s 6 16 None
7 17 None
8 18 None
9 19 None
concat
的一个选项:
x = [16,17,18,19]
last_max = int(df.loc['s'].index.max())
tmp = pd.DataFrame({'I1': x})
tmp.index = (tmp.index+last_max).astype(str)
out = (pd.concat([df, pd.concat([tmp], keys='s')])
.sort_index(level=0, sort_remaining=False, kind='stable')
)
输出:
I1 I2
c 1 10 5.0
2 22 1.0
3 33 1.0
4 44 1.0
5 55 1.0
s 1 11 0.0
2 12 1.0
3 13 2.0
4 14 3.0
5 15 4.0
5 16 NaN
6 17 NaN
7 18 NaN
8 19 NaN