pandas 对每行的第一个非零列值进行采样

rur96b6h  于 2023-02-27  发布在  其他
关注(0)|答案(2)|浏览(158)

我有一个Pandas的数据框,看起来像这样

data = {"Column1":["0", "1", "0", "0", "1"], "Column2":["2","0","2", "0", "2"], "Column3":["3","0","3", "3", "3"]}
df = pd.DataFrame(data)
print(df)
  Column1 Column2 Column3
0       0       2       3
1       1       0       0
2       0       2       3
3       0       0       3
4       1       2       3

我想得到一个 Dataframe ,每个df的索引的第一个值从左到右出现在列中。

data1 = {"Column1":["2", "1", "2", "3", "1"]}
df1 = pd.DataFrame(data1)
print(df1)
  Column1
0       2
1       1
2       2
3       3
4       1

有人能告诉我怎么做吗?
我是新的python,所以任何帮助将不胜感激!非常感谢!
我原以为这会奏效np. argmax(y,axis = 1),但不幸的是它不起作用。

kgsdhlau

kgsdhlau1#

获取每行的第一个非零值(使用numpy.argmaxnumpy.take_along_axis):

arr = df.astype(int).to_numpy()
s = pd.Series(np.take_along_axis(arr, np.argmax(arr > 0, axis=1)[:, None], axis=1).ravel())
print(s)

或者通过pd.DataFrame.apply函数:
x一个一个一个一个x一个一个二个x

i5desfxk

i5desfxk2#

下面是使用np.argmax()的方法

pd.DataFrame(np.argmax(df.to_numpy() != '0',axis=1)+1,columns = ['Column 1'])

输出:

Column 1
0         2
1         1
2         2
3         3
4         1

相关问题