パンダマージ101

468
cs95 2018-12-06 20:41.
  • パンダで(INNER|(LEFT| RIGHT| FULLOUTER)を実行する方法はJOIN
  • マージ後に欠落している行にNaNを追加するにはどうすればよいですか?
  • マージ後にNaNを取り除くにはどうすればよいですか?
  • インデックスでマージできますか?
  • パンダとのパフォーマンスの高いデカルト積(CROSS JOIN)
  • 複数のDataFrameをマージするにはどうすればよいですか?
  • mergejoinconcatupdate?WHO?何?なぜ?!

... もっと。パンダのマージ機能のさまざまな側面について尋ねるこれらの繰り返しの質問を見てきました。今日のマージとそのさまざまなユースケースに関する情報のほとんどは、不適切な言葉で検索できない数十の投稿に断片化されています。ここでの目的は、後世のためのより重要なポイントのいくつかを照合することです。

このQnAは、一般的なパンダのイディオムに関する一連の役立つユーザーガイドの次の記事となることを目的としています(データフレームをピボットする方法は?、およびPandasのconcat関数の「levels」、「keys」、およびnames引数とは何ですか?データフレームをピボットする方法は?参照してください。データフレームをピボットする方法は?については後で触れます)。

この投稿はドキュメントの代わりになるものではないことに注意してください。それもお読みください。いくつかの例はそこから取られています。

3 answers

696
cs95 2018-12-06 20:41.

この投稿は、パンダとのSQLフレーバーのマージ、その使用方法、および使用しない場合の入門書を読者に提供することを目的としています。

特に、この投稿の内容は次のとおりです。

  • 基本-結合のタイプ(LEFT、RIGHT、OUTER、INNER)

    • 異なる列名とのマージ
    • 出力でのマージキー列の重複を回避する
  • さまざまな条件下でのインデックスとのマージ

    • 名前付きインデックスを効果的に使用する
    • あるキーと別の列のインデックスとしてキーをマージします
  • 列とインデックスの多方向マージ(一意および非一意)

  • mergeおよびの注目すべき代替案join

この投稿が通過しないもの:

  • パフォーマンス関連の議論とタイミング(今のところ)。必要に応じて、より良い代替案についての最も注目すべき言及。
  • サフィックスの処理、余分な列の削除、出力の名前変更、およびその他の特定のユースケース。それを扱っている他の(読む:より良い)投稿があるので、それを理解してください!


ほとんどの例では、特に指定がない限り、さまざまな機能を示しながら、デフォルトでINNERJOIN操作が実行されます。

さらに、ここにあるすべてのDataFrameをコピーして複製できるため、それらを操作できます。また、 クリップボードからDataFrameを読み取る方法については、スタックオーバーフローからPythonにDataFrameをコピーして貼り付ける方法を参照してください。

最後に、JOIN操作のすべての視覚的表現は、Google図形描画を使用して手描きされています。ここからのインスピレーション。

十分な話、使い方を教えてくださいmerge

セットアップ

np.random.seed(0)
left = pd.DataFrame({'key': ['A', 'B', 'C', 'D'], 'value': np.random.randn(4)})    
right = pd.DataFrame({'key': ['B', 'D', 'E', 'F'], 'value': np.random.randn(4)})
  
left

  key     value
0   A  1.764052
1   B  0.400157
2   C  0.978738
3   D  2.240893

right

  key     value
0   B  1.867558
1   D -0.977278
2   E  0.950088
3   F -0.151357

簡単にするために、キー列の名前は同じです(今のところ)。

アンINNER JOINはで表され、


これは、今後の図とともに、すべてこの規則に従います。

  • は、マージ結果に存在する行を示します
  • は、結果から除外された(つまり削除された)行を示します
  • NaN、結果でsに置き換えられる欠落値を示します

INNER JOINを実行するmergeには、左側のDataFrameを呼び出し、右側のDataFrameと結合キー(少なくとも)を引数として指定します。

left.merge(right, on='key')
# Or, if you want to be explicit
# left.merge(right, on='key', how='inner')

  key   value_x   value_y
0   B  0.400157  1.867558
1   D  2.240893 -0.977278

この戻り行のみからleftright共有する共通鍵(この例では、「B」および「D)。

A LEFT OUTER JOIN、またはLEFT JOINは、がで表され

これは、を指定することで実行できますhow='left'

left.merge(right, on='key', how='left')

  key   value_x   value_y
0   A  1.764052       NaN
1   B  0.400157  1.867558
2   C  0.978738       NaN
3   D  2.240893 -0.977278

ここでNaNの配置に注意してください。を指定するとhow='left'、からのキーのみleftが使用され、から欠落しているデータrightはNaNに置き換えられます。

同様に、RIGHT OUTER JOIN、またはRIGHTJOINの場合は...

...具体的にhow='right'

left.merge(right, on='key', how='right')

  key   value_x   value_y
0   B  0.400157  1.867558
1   D  2.240893 -0.977278
2   E       NaN  0.950088
3   F       NaN -0.151357

ここでは、fromのキーrightが使用され、fromの欠落データleftはNaNに置き換えられます。

最後に、FULL OUTER JOINの場合、

を指定しますhow='outer'

left.merge(right, on='key', how='outer')

  key   value_x   value_y
0   A  1.764052       NaN
1   B  0.400157  1.867558
2   C  0.978738       NaN
3   D  2.240893 -0.977278
4   E       NaN  0.950088
5   F       NaN -0.151357

これは両方のフレームのキーを使用し、両方の行が欠落している場合はNaNが挿入されます。

ドキュメントには、これらのさまざまなマージがうまくまとめられています。

その他の結合-左-除外、右-除外、および完全-除外/ ANTI結合

左-JOINの除外右-JOINの除外が2つのステップで必要な場合。

左の場合-JOINを除く、

LEFT OUTER JOINを実行することから始めて、次に、leftのみからの行をフィルタリング(!を除く)します。

(left.merge(right, on='key', how='left', indicator=True)
     .query('_merge == "left_only"')
     .drop('_merge', 1))

  key   value_x  value_y
0   A  1.764052      NaN
2   C  0.978738      NaN

どこ、

left.merge(right, on='key', how='left', indicator=True)

  key   value_x   value_y     _merge
0   A  1.764052       NaN  left_only
1   B  0.400157  1.867558       both
2   C  0.978738       NaN  left_only
3   D  2.240893 -0.977278       both

同様に、右を除くJOINの場合、

(left.merge(right, on='key', how='right', indicator=True)
     .query('_merge == "right_only"')
     .drop('_merge', 1))

  key  value_x   value_y
2   E      NaN  0.950088
3   F      NaN -0.151357

最後に、左または右のキーのみを保持し、両方は保持しないマージを実行する必要がある場合(IOW、ANTI-JOINの実行)、

同様の方法でこれを行うことができます—

(left.merge(right, on='key', how='outer', indicator=True)
     .query('_merge != "both"')
     .drop('_merge', 1))

  key   value_x   value_y
0   A  1.764052       NaN
2   C  0.978738       NaN
4   E       NaN  0.950088
5   F       NaN -0.151357

キー列の異なる名前

キー列の名前が異なる場合(たとえば、lefthas keyLeftrighthasのkeyRight代わりにhas)、引数としてとkeyを指定する必要がleft_onあります。right_onon

left2 = left.rename({'key':'keyLeft'}, axis=1)
right2 = right.rename({'key':'keyRight'}, axis=1)

left2
 
  keyLeft     value
0       A  1.764052
1       B  0.400157
2       C  0.978738
3       D  2.240893

right2

  keyRight     value
0        B  1.867558
1        D -0.977278
2        E  0.950088
3        F -0.151357
left2.merge(right2, left_on='keyLeft', right_on='keyRight', how='inner')

  keyLeft   value_x keyRight   value_y
0       B  0.400157        B  1.867558
1       D  2.240893        D -0.977278

出力でのキー列の重複の回避

keyLeftfromleftkeyRightfromをマージするときに、出力にまたはのrightいずれkeyLeftkeyRight(両方ではない)のみが必要な場合は、準備段階としてインデックスを設定することから始めることができます。

left3 = left2.set_index('keyLeft')
left3.merge(right2, left_index=True, right_on='keyRight')
    
    value_x keyRight   value_y
0  0.400157        B  1.867558
1  2.240893        D -0.977278

これを直前のコマンドの出力(つまり、の出力left2.merge(right2, left_on='keyLeft', right_on='keyRight', how='inner'))と比較すると、keyLeft欠落していることがわかります。どのフレームのインデックスがキーとして設定されているかに基づいて、どの列を保持するかを判断できます。これは、たとえば、OUTERJOIN操作を実行するときに問題になる可能性があります。

の1つから1つの列のみをマージする DataFrames

たとえば、

right3 = right.assign(newcol=np.arange(len(right)))
right3
  key     value  newcol
0   B  1.867558       0
1   D -0.977278       1
2   E  0.950088       2
3   F -0.151357       3

「new_val」のみ(他の列は含まない)のみをマージする必要がある場合は、通常、マージする前に列をサブセット化することができます。

left.merge(right3[['key', 'newcol']], on='key')

  key     value  newcol
0   B  0.400157       0
1   D  2.240893       1

LEFT OUTER JOINを実行している場合、よりパフォーマンスの高いソリューションにはmap次のものが含まれます。

# left['newcol'] = left['key'].map(right3.set_index('key')['newcol']))
left.assign(newcol=left['key'].map(right3.set_index('key')['newcol']))

  key     value  newcol
0   A  1.764052     NaN
1   B  0.400157     0.0
2   C  0.978738     NaN
3   D  2.240893     1.0

前述のように、これは似ていますが、より高速です

left.merge(right3[['key', 'newcol']], on='key', how='left')

  key     value  newcol
0   A  1.764052     NaN
1   B  0.400157     0.0
2   C  0.978738     NaN
3   D  2.240893     1.0

複数の列にマージする

複数の列に参加するには、on(またはleft_onおよびright_on、必要に応じて)のリストを指定します。

left.merge(right, on=['key1', 'key2'] ...)

または、名前が異なる場合は、

left.merge(right, left_on=['lkey1', 'lkey2'], right_on=['rkey1', 'rkey2'])

その他の便利なmerge*操作と機能

  • DataFrameとインデックスのシリーズのマージこの回答を参照してください。

  • に加えてmergeDataFrame.updateおよびDataFrame.combine_first特定の場合に、あるDataFrameを別のDataFrameで更新するためにも使用されます。

  • pd.merge_ordered 順序付けられたJOINに便利な関数です。

  • pd.merge_asof(読み取り:merge_asOf)は、近似結合に役立ちます。

このセクションは非常に基本的なことだけをカバーし、あなたの食欲を刺激することだけを目的としています。より多くの例と例については、参照のドキュメントをmergejoinconcatだけでなく、機能仕様へのリンク。


インデックスベース* -JOIN(+ index-column merges)

セットアップ

np.random.seed([3, 14])
left = pd.DataFrame({'value': np.random.randn(4)}, index=['A', 'B', 'C', 'D'])    
right = pd.DataFrame({'value': np.random.randn(4)}, index=['B', 'D', 'E', 'F'])
left.index.name = right.index.name = 'idxkey'

left
           value
idxkey          
A      -0.602923
B      -0.402655
C       0.302329
D      -0.524349

right
 
           value
idxkey          
B       0.543843
D       0.013135
E      -0.326498
F       1.385076

通常、インデックスのマージは次のようになります。

left.merge(right, left_index=True, right_index=True)


         value_x   value_y
idxkey                    
B      -0.402655  0.543843
D      -0.524349  0.013135

インデックス名のサポート

あなたのインデックスが命名されている場合は、v0.23ユーザーもにレベル名を指定することができますon(またはleft_onおよびright_on必要に応じて)。

left.merge(right, on='idxkey')

         value_x   value_y
idxkey                    
B      -0.402655  0.543843
D      -0.524349  0.013135

1つのインデックス、別の列のマージ

あるインデックスと別の列を使用してマージを実行することは可能です(そして非常に簡単です)。例えば、

left.merge(right, left_on='key1', right_index=True)

またはその逆(right_on=...およびleft_index=True)。

right2 = right.reset_index().rename({'idxkey' : 'colkey'}, axis=1)
right2
 
  colkey     value
0      B  0.543843
1      D  0.013135
2      E -0.326498
3      F  1.385076

left.merge(right2, left_index=True, right_on='colkey')

    value_x colkey   value_y
0 -0.402655      B  0.543843
1 -0.524349      D  0.013135

この特殊なケースでは、のインデックスにleft名前が付けられているためleft_on、次のようにインデックス名をと一緒に使用することもできます。

left.merge(right2, left_on='idxkey', right_on='colkey')

    value_x colkey   value_y
0 -0.402655      B  0.543843
1 -0.524349      D  0.013135

DataFrame.join
これらに加えて、別の簡潔なオプションがあります。DataFrame.joinインデックスで結合するデフォルトを使用できます。DataFrame.joinデフォルトでLEFTOUTER JOINを実行するため、ここhow='inner'で必要です。

left.join(right, how='inner', lsuffix='_x', rsuffix='_y')

         value_x   value_y
idxkey                    
B      -0.402655  0.543843
D      -0.524349  0.013135

エラーが発生するためlsuffixrsuffix引数と引数を指定する必要があることに注意してくださいjoin

left.join(right)
ValueError: columns overlap but no suffix specified: Index(['value'], dtype='object')
 

列名が同じなので。名前が異なっていれば、これは問題にはなりません。

left.rename(columns={'value':'leftvalue'}).join(right, how='inner')

        leftvalue     value
idxkey                     
B       -0.402655  0.543843
D       -0.524349  0.013135

pd.concat
最後に、インデックスベースの結合の代わりに、次を使用できますpd.concat

pd.concat([left, right], axis=1, sort=False, join='inner')

           value     value
idxkey                    
B      -0.402655  0.543843
D      -0.524349  0.013135

join='inner'完全外部結合が必要な場合は省略します(デフォルト):

pd.concat([left, right], axis=1, sort=False)

      value     value
A -0.602923       NaN
B -0.402655  0.543843
C  0.302329       NaN
D -0.524349  0.013135
E       NaN -0.326498
F       NaN  1.385076

詳細についてPandasのconcat関数の「levels」、「keys」、およびnames引数とは何ですか?参照Pandasのconcat関数の「levels」、「keys」、およびnames引数とは何ですか?Pandasのconcat関数の「levels」、「keys」、およびnames引数とは何ですか?


一般化:merge複数のDataFrameを作成する

多くの場合、この状況は、複数のDataFrameをマージするときに発生します。素朴に、これはmerge呼び出しを連鎖させることによって行うことができます。

df1.merge(df2, ...).merge(df3, ...)

ただし、これは多くのDataFrameですぐに手に負えなくなります。さらに、不明な数のDataFrameを一般化する必要がある場合があります。

ここで私は紹介pd.concatマルチウェイは、上の加入のためのユニークなキー、およびDataFrame.joinマルチウェイのために参加する非ユニークキー。まず、セットアップ。

# Setup.
np.random.seed(0)
A = pd.DataFrame({'key': ['A', 'B', 'C', 'D'], 'valueA': np.random.randn(4)})    
B = pd.DataFrame({'key': ['B', 'D', 'E', 'F'], 'valueB': np.random.randn(4)})
C = pd.DataFrame({'key': ['D', 'E', 'J', 'C'], 'valueC': np.ones(4)})
dfs = [A, B, C] 

# Note, the "key" column values are unique, so the index is unique.
A2 = A.set_index('key')
B2 = B.set_index('key')
C2 = C.set_index('key')

dfs2 = [A2, B2, C2]

一意キー(またはインデックス)での多方向マージ

キー(ここでは、キーは列またはインデックスのいずれか)が一意である場合は、を使用できますpd.concatpd.concatインデックスでDataFrame結合すること注意してください。

# merge on `key` column, you'll need to set the index before concatenating
pd.concat([
    df.set_index('key') for df in dfs], axis=1, join='inner'
).reset_index()

  key    valueA    valueB  valueC
0   D  2.240893 -0.977278     1.0

# merge on `key` index
pd.concat(dfs2, axis=1, sort=False, join='inner')

       valueA    valueB  valueC
key                            
D    2.240893 -0.977278     1.0

join='inner'完全な外部結合は省略してください。LEFTまたはRIGHTOUTER結合を指定できないことに注意してください(これらが必要な場合はjoin、以下で説明するを使用してください)。

重複するキーの多方向マージ

concat高速ですが、欠点があります。重複は処理できません。

A3 = pd.DataFrame({'key': ['A', 'B', 'C', 'D', 'D'], 'valueA': np.random.randn(5)})
pd.concat([df.set_index('key') for df in [A3, B, C]], axis=1, join='inner')
ValueError: Shape of passed values is (3, 4), indices imply (3, 2)

この状況では、join一意でないキーを処理できるため、を使用できます(joinインデックスでDataFrameを結合することに注意してくださいmerge。特に指定がない限り、内部で呼び出し、LEFT OUTER JOINを実行します)。

# join on `key` column, set as the index first
# For inner join. For left join, omit the "how" argument.
A.set_index('key').join(
    [df.set_index('key') for df in (B, C)], how='inner').reset_index()

  key    valueA    valueB  valueC
0   D  2.240893 -0.977278     1.0

# join on `key` index
A3.set_index('key').join([B2, C2], how='inner')

       valueA    valueB  valueC
key                            
D    1.454274 -0.977278     1.0
D    0.761038 -0.977278     1.0
62
eliu 2019-04-26 13:43.

の補足的な視覚的ビューpd.concat([df0, df1], kwargs)。お知らせ、kwargことaxis=0axis=1の意味はほど直感的ではありませんdf.mean()df.apply(func)


5
Gonçalo Peres 龚燿禄 2020-08-11 00:13.

この回答では、の実際的な例を検討しpandas.concatます。

DataFrames同じ列名で次のことを考慮してください。

Preco2018サイズ(8784、5)

Preco 2019サイズ(8760、5)

同じ列名です。

を使用してpandas.concat、簡単にそれらを組み合わせることができます

import pandas as pd

frames = [Preco2018, Preco2019]

df_merged = pd.concat(frames)

これにより、次のサイズのDataFrameが生成されます(17544、5)

視覚化したい場合は、このように動作することになります

出典

Related questions

MORE COOL STUFF

ケイト・ブランシェットは3日間一緒に夫と一緒に寝て、25年経ってもまだ夫と結婚しています

ケイト・ブランシェットは3日間一緒に夫と一緒に寝て、25年経ってもまだ夫と結婚しています

ケイト・ブランシェットは、夫に会ったとき、典型的な交際のアドバイスに逆らいました。

マイケルシーンが非営利の俳優である理由

マイケルシーンが非営利の俳優である理由

マイケルシーンは非営利の俳優ですが、それは正確にはどういう意味ですか?

ホールマークスターのコリンエッグレスフィールドがRomaDramaLiveでスリル満点のファンと出会う![エクスクルーシブ]

ホールマークスターのコリンエッグレスフィールドがRomaDramaLiveでスリル満点のファンと出会う![エクスクルーシブ]

特徴的なスターのコリン・エッグレスフィールドは、RomaDrama Liveでのスリル満点のファンとの出会いについて料理しました!加えて、大会での彼のINSPIREプログラム。

「たどりつけば」をオンラインでストリーミングできない理由

「たどりつけば」をオンラインでストリーミングできない理由

ノーザンエクスポージャーが90年代の最も人気のある番組の1つになった理由を確認するには、Blu-rayまたはDVDプレーヤーをほこりで払う必要があります。

バイオニック読書はあなたをより速く読むことができますか?

バイオニック読書はあなたをより速く読むことができますか?

BionicReadingアプリの人気が爆発的に高まっています。しかし、それは本当にあなたを速読術にすることができますか?

ドミニカのボイリング湖:アクセスは簡単ではありませんが、ハイキングする価値があります

ドミニカのボイリング湖:アクセスは簡単ではありませんが、ハイキングする価値があります

ドミニカのボイリング湖は、世界で2番目に大きいボイリング湖です。そこにたどり着くまでのトレッキングは大変で長いですが、努力する価値は十分にあります。

私たちの水をきれいに保つのを助けるためにあなたの髪を寄付してください

私たちの水をきれいに保つのを助けるためにあなたの髪を寄付してください

サロンからのヘアトリミングや個人的な寄付は、油流出を吸収して環境を保護するのに役立つマットとして再利用できます。

ホワイトハウスの最も記憶に残る結婚式を見てください

ホワイトハウスの最も記憶に残る結婚式を見てください

過去200年以上の間にホワイトハウスで結婚したのはほんの数人です。彼らは誰でしたか、そしてそこで結婚式を獲得するために何が必要ですか?

グッドジョブ、ESPN

グッドジョブ、ESPN

今日のホワイトハウスの記者会見で、報道官のサラ・ハッカビー・サンダースは、スポーツセンターのホストであるイェメル・ヒルのドナルド・トランプに関する最近のツイートについてコメントするよう求められ、大統領と彼の政策を白人至上主義者として説明した。ヒルは彼女のつぶやきのためにESPNによって公に叱責されました。

アマゾンからのこのレミントンツールセールで髪を整える、スタイルを整える、乾かす、または取り除く

アマゾンからのこのレミントンツールセールで髪を整える、スタイルを整える、乾かす、または取り除く

基本的に頭のあらゆる部分から髪の毛を整えたり、ブロードライしたり、まっすぐにしたり、脱毛したりする必要がある場合は、このレミントンゴールドボックスが最適です。今日だけ、Amazonは、すでに人気のあるShortcut Pro Self-HaircutKitやPearlPro Ceramic Flat Ironのように、グルーミングをはるかに簡単にするヘアツールをマークダウンしています。

カナダの元桂冠詩人が、史上最高の文化の盗用でトゥパックとマヤアンジェロウから盗んだ

カナダの元桂冠詩人が、史上最高の文化の盗用でトゥパックとマヤアンジェロウから盗んだ

トゥパックシャクール(ティムモーゼンフェルダー/ゲッティイメージズ); マヤアンジェロウ(マーティンゴッドウィン/ゲッティイメージズ)移動、テイラースウィフト。ケンドールとカイリーは、必要な数の座席を持っています。

テスラは、ハリケーンイルマによる避難を容易にするために、フロリダでの車両の範囲を拡大しています

テスラは、ハリケーンイルマによる避難を容易にするために、フロリダでの車両の範囲を拡大しています

写真:Tesla Motorsフロリダに住んでいて、Tesla Model S、Model X 60、またはModel 60Dを使用している場合、車の自律性は50 km(約30マイル)高くなります。これは失敗ではなく、ハリケーンイルマによる避難作業を容易にするために会社自身が命じた自治権の一時的な延長です。

Zendaya Wishes Boyfriend Tom Holland Happy Birthday with Cuddly Photo: He 'Makes Me the Happiest'

Zendaya Wishes Boyfriend Tom Holland Happy Birthday with Cuddly Photo: He 'Makes Me the Happiest'

Zendaya shared a sweet photo in honor of boyfriend Tom Holland's 26th birthday Wednesday

小さな女性:脳卒中を患った後に病院から解放されたアトランタのジューシーな赤ちゃん:「まだ癒し」

小さな女性:脳卒中を患った後に病院から解放されたアトランタのジューシーな赤ちゃん:「まだ癒し」

シーレン「Ms.JuicyBaby」ピアソンは、先月脳卒中で入院した後、「もう一度たくさんのことをする方法を学ばなければならない」ため、言語療法を受けていることを明らかにしました。

エマストーンは彼女のクリフサイドマリブビーチハウスを420万ドルでリストアップしています—中を見てください!

エマストーンは彼女のクリフサイドマリブビーチハウスを420万ドルでリストアップしています—中を見てください!

オスカー受賞者の世紀半ばの家には、3つのベッドルーム、2つのバス、オーシャンフロントの景色があります。

ジーニー・メイ・ジェンキンスは、母乳育児の経験の中で、彼女は「本当に、本当に落ち込んでいる」と言います

ジーニー・メイ・ジェンキンスは、母乳育児の経験の中で、彼女は「本当に、本当に落ち込んでいる」と言います

ジーニー・メイ・ジェンキンスは、生後4か月の娘、モナコに母乳育児をしていると語った。

投資ノート:Bioscout AU$300万シード

投資ノート:Bioscout AU$300万シード

Bioscoutは、農家を運転席に置くという使命を負っています。Artesian(GrainInnovate)やUniseedと並んで、最新のシードラウンドでチームを支援できることをうれしく思います。問題真菌症による重大な作物の損失は、農民にとって試練であることが証明されています。

リトルマーケットリサーチ1| 2022年のクイックグリンプス遠隔医療市場

リトルマーケットリサーチ1| 2022年のクイックグリンプス遠隔医療市場

遠隔医療は、パンデミック後の時代では新しいものではなく、時代遅れの分野でもありません。しかし、業界を詳しく見ると、需要と供給の強力な持続可能性と、米国で絶え間ない革命となる強力な潜在的成長曲線を示しています。

スタートアップ資金調達環境:タイのスタートアップエコシステムの次は何ですか?

スタートアップ資金調達環境:タイのスタートアップエコシステムの次は何ですか?

2021年は、世界的なベンチャーキャピタル(VC)の資金調達にとって記録的な年でした。DealStreetAsiaによると、東南アジアも例外ではなく、この地域では年間で記録的な25の新しいユニコーンが採掘されました。

ムーアの法則を超えて

ムーアの法則を超えて

計算に対する私たちの欲求とムーアの法則が提供できるものとの間には、指数関数的に増大するギャップがあります。私たちの文明は計算に基づいています—建築と想像力の現在の限界を超える技術を見つけなければなりません。

Language