データフレームに2つの列を追加したいのですが、データフレームに50の行があるので、列1の値は1から50、列2の値51私はPythonで初心者ですと上記の機能は、私の要求を満たすために修正が必要ですが、そうすることができませんでし増分値を持つデータフレームに2つの列を追加したい
def insertId(new_df, str):
df.insertId(0, str, range(1, 1 + len(df)))
return df
100にする必要があります。
データフレームに2つの列を追加したいのですが、データフレームに50の行があるので、列1の値は1から50、列2の値51私はPythonで初心者ですと上記の機能は、私の要求を満たすために修正が必要ですが、そうすることができませんでし増分値を持つデータフレームに2つの列を追加したい
def insertId(new_df, str):
df.insertId(0, str, range(1, 1 + len(df)))
return df
100にする必要があります。
最初numpy array
を作成し、DataFrame
コンストラクタに渡し:
a = np.arange(1, 101).reshape(2,-1).T
df1 = pd.DataFrame(a, columns=['a','b'])
print(df1.head())
a b
0 1 51
1 2 52
2 3 53
3 4 54
4 5 55
最終は、元のデータフレームに追加します。insert
とあなたの関数と
df = df.join(df1)
ソリューションを - の位置を特定することも可能です列pos
、次に列名col
と最後の開始番号start
:
#some Dataframe
a = np.arange(1, 101).reshape(2,-1).T
df = pd.DataFrame(a, columns=['a','b'])
print (df.head())
a b
0 1 51
1 2 52
2 3 53
3 4 54
4 5 55
def insertId(new_df, pos, col, start):
new_df.insert(pos, col, range(start, len(new_df) + start))
return new_df
#insert new column called s to DataFrame df in position 0 and values starts in 50
df = insertId(df, 0, 's', 50)
df = insertId(df, 2, 'new', 14)
print (df.head())
s a new b
0 50 1 14 51
1 51 2 15 52
2 52 3 16 53
3 53 4 17 54
4 54 5 18 55
# Create sample data for initial dataframe.
np.random.seed(0)
df = pd.DataFrame(np.random.randn(5, 3), columns=list('ABC'))
>>> df
A B C
0 1.764052 0.400157 0.978738
1 2.240893 1.867558 -0.977278
2 0.950088 -0.151357 -0.103219
3 0.410599 0.144044 1.454274
4 0.761038 0.121675 0.443863
# Add new columns in sequential order.
n = len(df)
new_cols = ['a', 'b'] # Desired names for new columns.
new_col_count = len(new_cols)
df2 = pd.DataFrame(
np.arange(1, n * new_col_count + 1).reshape(n, new_col_count, order='F')
columns=new_cols,
index=df.index)
>>> pd.concat([df, df2], axis=1)
A B C a b
0 1.764052 0.400157 0.978738 1 6
1 2.240893 1.867558 -0.977278 2 7
2 0.950088 -0.151357 -0.103219 3 8
3 0.410599 0.144044 1.454274 4 9
4 0.761038 0.121675 0.443863 5 10
私は我々が外加算を行うことにより、他の一般的な解決策を生み出すことができアレキサンダーのセットアップ
セットアップ
np.random.seed(0)
df = pd.DataFrame(np.random.randn(5, 3), columns=list('ABC'))
df
A B C
0 1.764052 0.400157 0.978738
1 2.240893 1.867558 -0.977278
2 0.950088 -0.151357 -0.103219
3 0.410599 0.144044 1.454274
4 0.761038 0.121675 0.443863
オプション1
@活用しましょうナンシーと下の例では、私がm = 5
と指定した5つの追加の列を使用した例を示します。私はstring
のascii_lowercase
を使って余分の列のラベルをつかむ。
from string import ascii_lowercase as labels
import pandas as pd
impot numpy as np
n = len(df)
m = 5
df.assign(**dict(zip(
labels[:m],
np.add.outer(np.arange(m) * n, np.arange(n))
)))
A B C a b c d e
0 1.764052 0.400157 0.978738 0 5 10 15 20
1 2.240893 1.867558 -0.977278 1 6 11 16 21
2 0.950088 -0.151357 -0.103219 2 7 12 17 22
3 0.410599 0.144044 1.454274 3 8 13 18 23
4 0.761038 0.121675 0.443863 4 9 14 19 24
オプション2
私はpd.DataFrame.assign
と解決策を示す傾向にあります。しかし、pd.DataFrame.join
で同じことを達成できた可能性もあります。この場合、私はまだNumpyの外側の追加を使用していますが、私はオプション1で行ったものの転置を使用して、新しいデータフレームを構築し、元のものと結合します。
n = len(df)
m = 5
df.join(pd.DataFrame(
np.add.outer(np.arange(n), np.arange(m) * n),
df.index, list('abcde')
))
A B C a b c d e
0 1.764052 0.400157 0.978738 0 5 10 15 20
1 2.240893 1.867558 -0.977278 1 6 11 16 21
2 0.950088 -0.151357 -0.103219 2 7 12 17 22
3 0.410599 0.144044 1.454274 3 8 13 18 23
4 0.761038 0.121675 0.443863 4 9 14 19 24