例如,我有一個DataFrame A
如下如何將n DataFrame插入到熊貓中的第n行?
A
0
1
2
現在我想每2行中DataFrame B
插入A
每1行B
是如下
B
3
3
4
4
5
5
最後我想
A
0
3
3
1
4
4
2
5
5
我該如何做到這一點?
例如,我有一個DataFrame A
如下如何將n DataFrame插入到熊貓中的第n行?
A
0
1
2
現在我想每2行中DataFrame B
插入A
每1行B
是如下
B
3
3
4
4
5
5
最後我想
A
0
3
3
1
4
4
2
5
5
我該如何做到這一點?
一種選擇是獲取每個數據幀的值,重塑,與np.hstack
連接,然後分配給新的數據幀。
In [533]: pd.DataFrame(np.hstack((df1.A.values.reshape(-1, 1),\
df2.B.values.reshape(-1, 2))).reshape(-1,),\
columns=['A'])
Out[533]:
A
0 0
1 3
2 3
3 1
4 4
5 4
6 2
7 5
8 5
與pd.concat
和df.stack
另一種解決方案:
In [622]: pd.DataFrame(pd.concat([df1.A, pd.DataFrame(df2.B.values.reshape(-1, 2))], axis=1)\
.stack().reset_index(drop=True),\
columns=['A'])
Out[622]:
A
0 0
1 3
2 3
3 1
4 4
5 4
6 2
7 5
8 5
也許這一個?
A=len(df1)+len(df2)
df1.index=(list(range(0, A,3)))
df2.index=list(set(range(0, A))-set(range(0, A,3)))
df2.columns=['A']
df=pd.concat([df1,df2],axis=0).sort_index()
df
Out[188]:
A
0 0
1 3
2 3
3 1
4 4
5 4
6 2
7 5
8 5
設置
考慮dataframes從toolz
或
訣竅a
和b
a = pd.DataFrame(dict(A=range(3)))
b = pd.DataFrame(dict(B=np.arange(3).repeat(2) + 3))
解決方案
使用interleave
是b
分成的兩個參數
from cytoolz import interleave
pd.Series(list(interleave([a.A, b.B[::2], b.B[1::2]])))
0 0
1 3
2 3
3 1
4 4
5 4
6 2
7 5
8 5
dtype: int64
啊cytoolz再次。 –
如果我們首先分割爲len的(a)的陣列和b爲len(b)中的兩個陣列,我們可以壓縮在一起,疊層的變形例並連接。
a = np.split(dfa.A.values,len(dfa.A))
b = np.split(dfb.B.values,len(dfb.B)/2)
c = np.concatenate(np.hstack(list(zip(a,b))))
pd.Series(c)
返回:
0 0
1 3
2 3
3 1
4 4
5 4
6 2
7 5
8 5
dtype: int64
感謝您的回覆,有沒有在大熊貓一些內置的方法可以做到這一點? – danche
@danche你想要什麼是很好的利基。有'pd.concat',但不能任意交織系列。 –
或者也許可以考慮'reset_index' – Wen