グループ制約付きの左側に列値を移動します -- python フィールド と pandas フィールド と dataframe フィールド 関連 問題

Shift column values to the left with group constraints












5
vote

問題

日本語

私は「潜在的に」大きいデータフレームを持っています、

<事前> <コード> A B_1 B_2 B_3 C_1 C_2 C_3 0 231 text2 text3 NaN date4 date1 NaN 1 443 NaN NaN text1 date2 NaN NaN 2 456 text1 text1 text2 NaN date3 date1

NaN sの一部を最小限に抑えるために、すべてのデータを左にシフトさせたいため、 NaN 列を無視できます。このシフトは適切なグループ内に留まる必要があります。つまり、C_1などにシフトされていない限り、セルがB_1またはB_2になっている場合は問題がありません。

私が終わったことはこれです、

<事前> <コード> A B_1 B_2 B_3 C_1 C_2 0 231 text2 text3 NaN date4 date1 1 443 text1 NaN NaN date2 NaN 2 456 text1 text1 text2 date3 date1
英語

I have a "potentially" large DataFrame,

     A    B_1    B_2    B_3    C_1    C_2    C_3 0  231  text2  text3    NaN  date4  date1    NaN 1  443  NaN    NaN    text1  date2    NaN    NaN 2  456  text1  text1  text2  NaN    date3  date1 

In order to minimize some of the NaNs I want to shift all the data to the left and thus be able to disregard all NaN columns. This shift though must remain within the appropriate group, meaning that it does not matter if a cell is in column B_1 or B_2, as long as it does not get shifted to C_1 etc.

What I want to end up with is this,

     A    B_1    B_2    B_3    C_1    C_2     0  231  text2  text3    NaN  date4  date1 1  443  text1    NaN    NaN  date2    NaN 2  456  text1  text1  text2  date3  date1 
</div
        

回答リスト

2
 
vote

グループごとの関数、必要な MultiIndex

のみ: <事前> <コード> df = df.set_index('A') df.columns = df.columns.str.split('_', expand=True) f = lambda x: pd.DataFrame(justify(x.values, invalid_val=np.nan), index=x.index, columns=x.columns) df = df.groupby(axis=1, level=0).apply(f) print (df) B C 1 2 3 1 2 3 A 231 text2 text3 NaN date4 date1 NaN 443 text1 NaN NaN date2 NaN NaN 456 text1 text1 text2 date3 date1 NaN

、次に

<事前> <コード> df1.columns = [f'{a}_{b}' for a, b in df1.columns] df1 = df1.reset_index()

解決策と組み合わせる前の答え:

<事前> <コード> onMeasure()0
 

Use justify function per groups, only necessary MultiIndex in columns:

df = df.set_index('A') df.columns = df.columns.str.split('_', expand=True)  f = lambda x: pd.DataFrame(justify(x.values, invalid_val=np.nan),                             index=x.index, columns=x.columns) df = df.groupby(axis=1, level=0).apply(f) print (df)          B                    C                      1      2      3      1      2    3 A                                           231  text2  text3    NaN  date4  date1  NaN 443  text1    NaN    NaN  date2    NaN  NaN 456  text1  text1  text2  date3  date1  NaN 

And then:

df1.columns = [f'{a}_{b}' for a, b in df1.columns] df1 = df1.reset_index() 

Combined with solution from previous answer:

g = df.groupby('A').cumcount() + 1 df1 = df.set_index(['A', g]).unstack()  f = lambda x: pd.DataFrame(justify(x.values, invalid_val=np.nan),                             index=x.index, columns=x.columns) df1 = df.groupby(axis=1, level=0).apply(f)  df1.columns = [f'{a}_{b}' for a, b in df1.columns] df1 = df1.reset_index() 
</div
 
 
 
 

関連する質問

1  R - コマンドライン引数によってデータフレーム名を決定したい  ( R i want data frame name to be determined by a command line argument ) 
コマンドライン引数でデータフレーム名を決定したいです。以下は、私がやろうとしていることを明確にするようにしてください...私は願っています! 使用: <事前> <コード> Context ctx = getApplicationContext(); S...

1  データフレームの各列をフィルタリングすると、比類のない値の場合はNA  ( Filtering each column of a data frame an put na for unmatched values ) 
私は以下のような表を持っています: <事前> <コード> [,1] [,2] [,3] [,4] [,5] [1,] a A 0.06 0.31 -1.5 [2,] b B -0.75 0.2 ...

4  rbind()を使用して、複数のデータフレームを1つの大きさのデータに組み合わせる。  ( Using rbind to combine multiple data frames into one larger data frame within ) 
R-Studio 0.99.491とRバージョン3.2.3(2015-12-10)を使用しています。私はrの相対的なニュービーです、そして私はいくつかの助けに感謝します。私は、古いメディアサーバー上のサーバーログを使用しようとしているプロジェクトをやっていま...

1  データフレーム内のエントリの変更は、2つの値の間にあるか、値の下にあるかどうかに応じて  ( Changing entries in a dataframe depending on whether they are between two values ) 
私は1列の距離を持つデータフレームと他の列のスコア、例えば <事前> <コード> Distance Scores 1000. 1 1500. 1 ETC。 私は言う区分的な機能を持っています: 距離&gt = 1000の場合、スコアをゼロに変...

1  Pandas Groupbyをグループ行グループに使用するには、列値を合計して決定できますか?  ( Can you use pandas groupby to group rows determined by summing a column value ) 
データフレームの行を1列の値でグループ化したいと思います。以下に示す例は、iが150の値で 'NumberOfTrades'の値をグループ化していた場合であるので、上位2行がグループ化され、下位3行がグループ化されます。私が理解している次のステップは、各グルー...

96  データフレームセル内のリストを別々の行に爆発させる方法  ( How to explode a list inside a dataframe cell into separate rows ) 
リストを含むPandasセルをそれらの値それぞれの行に変えることを目指しています。 だから、これを取ります: nearest_neighbors 列の値を解凍してスタックしたい場合は、各値が各 opponent indextでは行になるようにしてく...

2  パンダの行を変更します  ( Change rows in pandas ) 
Pandasデータフレームにマトリックスを持っています <事前> <コード> print dfMatrix 0 1 2 3 4 0 10000 10 8 11 ...

12  Rの重複属性を持つ行を取り除きます  ( Get rid of rows with duplicate attributes in r ) 
私は次のような列を持つ大きなデータフレームを持っています。 <事前> <コード> ID, time, OS, IP そのデータフレームの各行は1つのエントリに対応します。一部の IDS 複数のエントリ(行)のデータフレーム内には存在します。それらの複数行を...

0  Pandasを使って最寄りの分をマージします  ( Merge with the nearest minute using pandas ) 
私は単に±1分の間隔で2つのデータフレームをマージしたいです。 ここにサンプルデータセットを持つname_df: <事前> <コード> Name Date A 2/19/2019 17:16:15 B 2/19/2019 17:...

1  タプルを鍵と値として辞書するPandas DataFrame  ( Pandas dataframe to dictionary with tuples as key and values ) 
私は以下の手助けが必要です: 私は以下のようにCSVファイルを持っていて、データフレーム 'DF'にロードされます。複数の領域、メモリ、VCPU、および各 '名前'に対応するストレージには異なる値があります。このデータフレームには1700行があります。 ...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有