将新列元素显式添加到DataFrame(Python 2)中的现有行
我正在尝试向行中添加列,如中所示 我已经为列/行节点定义了所需的值。我想显式地添加到具有给定索引的行中,以增加列数(例如,将新列元素显式添加到DataFrame(Python 2)中的现有行,python,pandas,append,dataframe,series,Python,Pandas,Append,Dataframe,Series,我正在尝试向行中添加列,如中所示 我已经为列/行节点定义了所需的值。我想显式地添加到具有给定索引的行中,以增加列数(例如,DF.ix[“a”]=DF.ix[“a”]+pd.Series([4,5,6,7],name=“a”,index=list(“defg”)) 下面的代码可以工作,但是我如何在不创建新的数据帧并连接它们的情况下做到这一点呢?我的实际值很大,如果可以的话,我希望避免创建不必要的数据帧对象 #!/usr/bin/python import pandas as pd X = [[1
DF.ix[“a”]=DF.ix[“a”]+pd.Series([4,5,6,7],name=“a”,index=list(“defg”))
下面的代码可以工作,但是我如何在不创建新的数据帧并连接它们的情况下做到这一点呢?我的实际值很大,如果可以的话,我希望避免创建不必要的数据帧对象
#!/usr/bin/python
import pandas as pd
X = [[1,2,3],[-1,-2,-3]]
r_labels = ["A","B"]
c_labels = ["a","b","c"]
DF = pd.DataFrame(X)
DF.index = r_labels
DF.columns = c_labels
#I want to add columns [d,e,f,g] to each row
row1 = [('d', 4), ('e', 5), ('f', 6), ('g', 7)]
row2 = [('d', -4), ('e', -5), ('f', -6), ('g', -7)]
DF_tmp = pd.DataFrame()
for r_label,row in zip(DF.index,[row1,row2]):
SR_row = pd.Series([x[1] for x in row],name=r_label,index=[x[0] for x in row])
DF_tmp = DF_tmp.append(SR_row)
DF = pd.concat([DF, DF_tmp], axis=1, join_axes=[DF.index])#, how='outer', on=DF_tmp.columns)
如果您只想添加一些随机整数和一些新列,那么您只需执行以下操作:
In [16]:
pd.concat([DF, pd.DataFrame(columns=list('defg'), data=np.random.randint(0, 4,(2,4)), index=DF.index)], axis=1)
Out[16]:
a b c d e f g
A 1 2 3 0 2 1 3
B -1 -2 -3 3 0 3 3
编辑
列出所需行值的列表,并构建df和concat
它们:
In [20]:
new_A = [4,5,6,7]
new_B = [-4,-5,-6,-7]
l=[new_A,new_B]
l
Out[20]:
[[4, 5, 6, 7], [-4, -5, -6, -7]]
In [21]:
pd.concat([DF, pd.DataFrame(columns=list('defg'), data=l, index=DF.index)], axis=1)
Out[21]:
a b c d e f g
A 1 2 3 4 5 6 7
B -1 -2 -3 -4 -5 -6 -7
如果您只想添加一些随机整数和一些新列,那么您只需执行以下操作:
In [16]:
pd.concat([DF, pd.DataFrame(columns=list('defg'), data=np.random.randint(0, 4,(2,4)), index=DF.index)], axis=1)
Out[16]:
a b c d e f g
A 1 2 3 0 2 1 3
B -1 -2 -3 3 0 3 3
编辑
列出所需行值的列表,并构建df和concat
它们:
In [20]:
new_A = [4,5,6,7]
new_B = [-4,-5,-6,-7]
l=[new_A,new_B]
l
Out[20]:
[[4, 5, 6, 7], [-4, -5, -6, -7]]
In [21]:
pd.concat([DF, pd.DataFrame(columns=list('defg'), data=l, index=DF.index)], axis=1)
Out[21]:
a b c d e f g
A 1 2 3 4 5 6 7
B -1 -2 -3 -4 -5 -6 -7
如果您只想添加一些随机整数和一些新列,那么您只需执行以下操作:
In [16]:
pd.concat([DF, pd.DataFrame(columns=list('defg'), data=np.random.randint(0, 4,(2,4)), index=DF.index)], axis=1)
Out[16]:
a b c d e f g
A 1 2 3 0 2 1 3
B -1 -2 -3 3 0 3 3
编辑
列出所需行值的列表,并构建df和concat
它们:
In [20]:
new_A = [4,5,6,7]
new_B = [-4,-5,-6,-7]
l=[new_A,new_B]
l
Out[20]:
[[4, 5, 6, 7], [-4, -5, -6, -7]]
In [21]:
pd.concat([DF, pd.DataFrame(columns=list('defg'), data=l, index=DF.index)], axis=1)
Out[21]:
a b c d e f g
A 1 2 3 4 5 6 7
B -1 -2 -3 -4 -5 -6 -7
如果您只想添加一些随机整数和一些新列,那么您只需执行以下操作:
In [16]:
pd.concat([DF, pd.DataFrame(columns=list('defg'), data=np.random.randint(0, 4,(2,4)), index=DF.index)], axis=1)
Out[16]:
a b c d e f g
A 1 2 3 0 2 1 3
B -1 -2 -3 3 0 3 3
编辑
列出所需行值的列表,并构建df和concat
它们:
In [20]:
new_A = [4,5,6,7]
new_B = [-4,-5,-6,-7]
l=[new_A,new_B]
l
Out[20]:
[[4, 5, 6, 7], [-4, -5, -6, -7]]
In [21]:
pd.concat([DF, pd.DataFrame(columns=list('defg'), data=l, index=DF.index)], axis=1)
Out[21]:
a b c d e f g
A 1 2 3 4 5 6 7
B -1 -2 -3 -4 -5 -6 -7
既然你已经在循环,为什么不:
In [1]: df = pd.DataFrame([[1,2,3],[-1,-2,-3]], columns=list('abc'), index=list('AB'))
In [2]: for c in 'defg':
df[c] = np.random.rand(len(df))
In [3]: df
Out[3]:
a b c d e f g
A 1 2 3 0.173682 0.332771 0.151931 0.250421
B -1 -2 -3 0.916427 0.664965 0.961631 0.512067
编辑:
根据您的评论,您可以随时将其更改为:
In [2]: for c, data in zip('defg', (d_data, e_data, f_data, g_data):
df[c] = pd.Series(data, index=df.index)
既然你已经在循环,为什么不:
In [1]: df = pd.DataFrame([[1,2,3],[-1,-2,-3]], columns=list('abc'), index=list('AB'))
In [2]: for c in 'defg':
df[c] = np.random.rand(len(df))
In [3]: df
Out[3]:
a b c d e f g
A 1 2 3 0.173682 0.332771 0.151931 0.250421
B -1 -2 -3 0.916427 0.664965 0.961631 0.512067
编辑:
根据您的评论,您可以随时将其更改为:
In [2]: for c, data in zip('defg', (d_data, e_data, f_data, g_data):
df[c] = pd.Series(data, index=df.index)
既然你已经在循环,为什么不:
In [1]: df = pd.DataFrame([[1,2,3],[-1,-2,-3]], columns=list('abc'), index=list('AB'))
In [2]: for c in 'defg':
df[c] = np.random.rand(len(df))
In [3]: df
Out[3]:
a b c d e f g
A 1 2 3 0.173682 0.332771 0.151931 0.250421
B -1 -2 -3 0.916427 0.664965 0.961631 0.512067
编辑:
根据您的评论,您可以随时将其更改为:
In [2]: for c, data in zip('defg', (d_data, e_data, f_data, g_data):
df[c] = pd.Series(data, index=df.index)
既然你已经在循环,为什么不:
In [1]: df = pd.DataFrame([[1,2,3],[-1,-2,-3]], columns=list('abc'), index=list('AB'))
In [2]: for c in 'defg':
df[c] = np.random.rand(len(df))
In [3]: df
Out[3]:
a b c d e f g
A 1 2 3 0.173682 0.332771 0.151931 0.250421
B -1 -2 -3 0.916427 0.664965 0.961631 0.512067
编辑:
根据您的评论,您可以随时将其更改为:
In [2]: for c, data in zip('defg', (d_data, e_data, f_data, g_data):
df[c] = pd.Series(data, index=df.index)
您还可以使用预定值创建另一个数据帧
DF2
,并将DF2
列添加到原始数据帧DF
DF2 = pd.DataFrame(
[[11,12,13,14],
[15,16,17,18]],
columns = ('x', 'y', 'z', 'u'), index=['A', 'B'])
DF2
x y z u
A 11 12 13 14
B 15 16 17 18
DF[['d', 'e', 'f', 'g']] = DF2[['x', 'y', 'z', 'u']]
DF
a b c d e f g
A 1 2 3 11 12 13 14
B -1 -2 -3 15 16 17 18
您还可以使用预定值创建另一个数据帧
DF2
,并将DF2
列添加到原始数据帧DF
DF2 = pd.DataFrame(
[[11,12,13,14],
[15,16,17,18]],
columns = ('x', 'y', 'z', 'u'), index=['A', 'B'])
DF2
x y z u
A 11 12 13 14
B 15 16 17 18
DF[['d', 'e', 'f', 'g']] = DF2[['x', 'y', 'z', 'u']]
DF
a b c d e f g
A 1 2 3 11 12 13 14
B -1 -2 -3 15 16 17 18
您还可以使用预定值创建另一个数据帧
DF2
,并将DF2
列添加到原始数据帧DF
DF2 = pd.DataFrame(
[[11,12,13,14],
[15,16,17,18]],
columns = ('x', 'y', 'z', 'u'), index=['A', 'B'])
DF2
x y z u
A 11 12 13 14
B 15 16 17 18
DF[['d', 'e', 'f', 'g']] = DF2[['x', 'y', 'z', 'u']]
DF
a b c d e f g
A 1 2 3 11 12 13 14
B -1 -2 -3 15 16 17 18
您还可以使用预定值创建另一个数据帧
DF2
,并将DF2
列添加到原始数据帧DF
DF2 = pd.DataFrame(
[[11,12,13,14],
[15,16,17,18]],
columns = ('x', 'y', 'z', 'u'), index=['A', 'B'])
DF2
x y z u
A 11 12 13 14
B 15 16 17 18
DF[['d', 'e', 'f', 'g']] = DF2[['x', 'y', 'z', 'u']]
DF
a b c d e f g
A 1 2 3 11 12 13 14
B -1 -2 -3 15 16 17 18
我喜欢这个,它是如何指定A或B的?我实际上没有使用随机值,它们的定义非常复杂,但我可以在我的问题中解决这个问题。很抱歉造成混淆。我正在尝试您的编辑,但我仍然不确定行“A”和行“B”在哪里是为赋值指定的我喜欢这样,它是如何指定A或B的?我实际上没有使用随机值,它们的定义非常复杂,但我可以在我的问题中解决这个问题。很抱歉造成混淆。我正在尝试您的编辑,但我仍然不确定“A”行和“B”行的位置是为赋值指定的我喜欢这样,它是如何指定A或B的?我实际上没有使用随机值,它们的定义非常复杂,但我可以在我的问题中解决这个问题。很抱歉造成混淆。我正在尝试您的编辑,但我仍然不确定“A”行和“B”行的位置是为赋值指定的我喜欢这样,它是如何指定A或B的?我实际上没有使用随机值,它们的定义非常复杂,但我可以在我的问题中解决这个问题。很抱歉造成混淆。我正在尝试您的编辑,但我仍然不确定“A”行和“B”行的位置正在为分配指定。很抱歉,我想我提到了这些值是实际的预定值。我更改了问题的这一部分以减少混淆。我有新列的特定条目,需要转到特定的行标签。感谢您的编辑,我如何将其显式添加到a行而不是a行假设矩阵的顺序正确?是否仍然可以
DF.ix[r\u label]=DF.ix[r\u label].append(SR\u行)
whereSR\u row.index=list(“defg”)
?您必须构造一个新的df并在索引上合并才能做到这一点,我建议不要对任何大型df使用它,除了一次添加一行是无效的之外。最好是构造整个df并将其合并,正如我所表示的抱歉,我想我提到的,这些值是实际的预定值。我将该部分更改为我有新列的特定条目,需要转到特定的行标签。感谢您的编辑,我如何才能显式地将其添加到a行,而不是假设矩阵的顺序正确?是否仍然可以DF.ix[r\u label]=DF.ix[r\u label].append(SR\u row)
其中SR_row.index=list(“defg”)
?您必须构造一个新的df并在索引上合并才能做到这一点,我建议不要对任何大型df使用它,除了一次添加一行是无效的之外。最好是构造整个df并将其合并,正如我所表示的抱歉,我想我提到的,这些值是实际的预定值。我将该部分更改为我有新列的特定条目,需要转到特定的行标签。感谢您的编辑,我如何才能显式地将其添加到a行,而不是假设矩阵的顺序正确?是否仍然可以DF.ix[r\u label]=DF.ix[r\u label].append(SR\u row)
其中SR_row.index=list(“defg”)
?您必须构建一个新的df并在索引上合并才能做到这一点,我建议您重新开始