2

データの場合、2 つの列を 3 番目の ( ) 列のタプルobjectにマップできますobject

>>> import pandas as pd
>>> df = pd.DataFrame([["A","b"], ["A", "a"],["B","b"]])
>>> df
   0  1
0  A  b
1  A  a
2  B  b

>>> df.apply(lambda row: (row[0], row[1]), axis=1)
0    (A, b)
1    (A, a)
2    (B, b)
dtype: object

( Pandas: How to use apply function to multiple columnsも参照してください)。

ただし、数値列で同じことをしようとすると

>>> df2 = pd.DataFrame([[10,2], [10, 1],[20,2]])
df2.apply(lambda row: (row[0], row[1]), axis=1)
     0     1
0    10    2
1    10    1
2    20    2

そのため、一連のペア (つまり[(10,2), (10,1), (20,2)])の代わりにDataFrame.

pandas実際に一連のペアを強制的に取得するにはどうすればよいですか? (できれば、文字列に変換してから解析するよりも適切に実行してください。)

4

1 に答える 1

4

これはお勧めしませんが、強制することはできます:

In [11]: df2.apply(lambda row: pd.Series([(row[0], row[1])]), axis=1)
Out[11]:
         0
0  (10, 2)
1  (10, 1)
2  (20, 2)

これをしないでください。

2 つの列を使用すると、パフォーマンス、柔軟性が大幅に向上し、後の分析が容易になります。

OPの経験で更新するだけです:

求められていたのは、各 [0, 1] ペアの出現をカウントすることでした。

シリーズでは、value_countsメソッドを使用できます(上記の結果の列を使用)。ただし、groupbyを使用して同じ結果を得ることができ、300 倍高速であることがわかりました (OP の場合)。

df2.groupby([0, 1]).size()

[11]各行に対して Series オブジェクトとタプル インスタンスを作成する必要があることを (再度) 強調する価値があります。これは、 groupby のオーバーヘッドと比較して大きなオーバーヘッドです。

于 2013-08-23T00:55:41.060 に答える