第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

連接新元數(shù)據(jù)并復(fù)制到所有行的最佳方式(Pandas)

連接新元數(shù)據(jù)并復(fù)制到所有行的最佳方式(Pandas)

慕桂英3389331 2021-11-16 16:02:26
我是熊貓的新手。這應(yīng)該很容易,但我的方法似乎不是最佳的。我有一個包含多行和多列的虛擬數(shù)據(jù)框。接下來,我想包含一些具有單個值(一行)的元數(shù)據(jù)的新列。我想將其作為新列包含在內(nèi),并且我想將這些值復(fù)制到所有現(xiàn)有行(這將使以后對數(shù)據(jù)進行一些操作變得更加容易)。df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],                    'B': ['B0', 'B1', 'B2', 'B3'],                    'C': ['C0', 'C1', 'C2', 'C3'],                    'D': ['D0', 'D1', 'D2', 'D3']},                   index=[0, 1, 2, 3])df2 = pd.DataFrame({'LAT': ['LAT0'],                    'LON': ['LON0'],                    'TIME': ['T0']},                   index=[0])我想要一個 4 行 7 列的數(shù)據(jù)框(LAT、LON、TIME、A、B、C、D)。我希望每一行都重復(fù)來自 LAT、LON 和 TIME 的值。我的做法是:df.insert(loc=0, column=['LAT'], value=df2['LAT'][0])并對 df2 中的每個變量重復(fù)。這似乎很愚蠢,而不是這樣做的正確方法。此外,我可以:df2.append(df1)但這并不能復(fù)制這些值。它用 NaN 填充。執(zhí)行這種簡單的單行數(shù)據(jù)串聯(lián)和復(fù)制的最佳方法是什么?
查看完整描述

2 回答

?
慕碼人2483693

TA貢獻1860條經(jīng)驗 獲得超9個贊

最簡單的是assign與字典解包一起使用**以添加新列,但需要一個單詞字符串列:


df1 = df1.assign(**df2.iloc[0])

print (df1)

    A   B   C   D   LAT   LON TIME

0  A0  B0  C0  D0  LAT0  LON0   T0

1  A1  B1  C1  D1  LAT0  LON0   T0

2  A2  B2  C2  D2  LAT0  LON0   T0

3  A3  B3  C3  D3  LAT0  LON0   T0

對于前置列另一個解決方案是使用reindex具有join:


df1 = df2.iloc[[0]].reindex(df1.index, method='ffill').join(df1)

print (df1)


    LAT   LON TIME   A   B   C   D

0  LAT0  LON0   T0  A0  B0  C0  D0

1  LAT0  LON0   T0  A1  B1  C1  D1

2  LAT0  LON0   T0  A2  B2  C2  D2

3  LAT0  LON0   T0  A3  B3  C3  D3

與DataFrame構(gòu)造函數(shù)非常相似:


df3 = pd.DataFrame(df2.iloc[0].to_dict(), index=df1.index)

print (df3)

    LAT   LON TIME

0  LAT0  LON0   T0

1  LAT0  LON0   T0

2  LAT0  LON0   T0

3  LAT0  LON0   T0


df1 = df3.join(df1)

print (df1)

    LAT   LON TIME   A   B   C   D

0  LAT0  LON0   T0  A0  B0  C0  D0

1  LAT0  LON0   T0  A1  B1  C1  D1

2  LAT0  LON0   T0  A2  B2  C2  D2

3  LAT0  LON0   T0  A3  B3  C3  D3

另一個 numpy 解決方案numpy.broadcast_to- 只有在并非所有列都具有相同類型(如字符串)時才小心,應(yīng)該應(yīng)用一些強制轉(zhuǎn)換:


df3 = pd.DataFrame(np.broadcast_to(df2.values, (len(df1),len(df2.columns))),

                   columns=df2.columns, index=df1.index)

print (df3)

    LAT   LON TIME

0  LAT0  LON0   T0

1  LAT0  LON0   T0

2  LAT0  LON0   T0

3  LAT0  LON0   T0


df1 = df3.join(df1)

print (df1)


    LAT   LON TIME   A   B   C   D

0  LAT0  LON0   T0  A0  B0  C0  D0

1  LAT0  LON0   T0  A1  B1  C1  D1

2  LAT0  LON0   T0  A2  B2  C2  D2

3  LAT0  LON0   T0  A3  B3  C3  D3

性能:


df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],

                    'B': ['B0', 'B1', 'B2', 'B3'],

                    'C': ['C0', 'C1', 'C2', 'C3'],

                    'D': ['D0', 'D1', 'D2', 'D3']},

                   index=[0, 1, 2, 3])


#[400000 rows x 4 columns]

df1 = pd.concat([df1] * 100000, ignore_index=True)


df2 = pd.DataFrame({'LAT': ['LAT0'],

                    'LON': ['LON0'],

                    'TIME': ['T0']},

                    index=[0])




In [286]: %timeit df1.assign(**df2.iloc[0])

23 ms ± 642 μs per loop (mean ± std. dev. of 7 runs, 10 loops each)


In [287]: %timeit df2.iloc[[0]].reindex(df1.index, method='ffill').join(df1)

35.7 ms ± 3.78 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)


In [288]: %timeit pd.DataFrame(df2.iloc[0].to_dict(), index=df1.index).join(df1)

54.7 ms ± 163 μs per loop (mean ± std. dev. of 7 runs, 10 loops each)


In [289]: %timeit pd.DataFrame(np.broadcast_to(df2.values, (len(df1),len(df2.columns))), columns=df2.columns, index=df1.index).join(df1)

27.8 ms ± 2.32 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)


#bunji solution

In [290]: %timeit df1.join(df2, how='outer').fillna(method='ffill')

244 ms ± 19.6 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)


查看完整回答
反對 回復(fù) 2021-11-16
?
胡說叔叔

TA貢獻1804條經(jīng)驗 獲得超8個贊

另一種選擇是:


df = df1.join(df2, how='outer').fillna(method='ffill')

print(df)


    A   B   C   D   LAT   LON TIME

0  A0  B0  C0  D0  LAT0  LON0   T0

1  A1  B1  C1  D1  LAT0  LON0   T0

2  A2  B2  C2  D2  LAT0  LON0   T0

3  A3  B3  C3  D3  LAT0  LON0   T0

請注意,how='outer'如果是唯一真正有必要df1擁有更少的行比df2,因為join做了左默認情況下加入。


查看完整回答
反對 回復(fù) 2021-11-16
  • 2 回答
  • 0 關(guān)注
  • 249 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號