问题
I have a Data Frame df0 with n columns. Only one of the columns contains a string, all other columns are empty or contain the "" string.
Is it possible to collapse the data frame into a single column data frame where for each row I get the non-empty element?
df0:
A B C
1 Car
2 Car
3 Bike
4 Car
5 Train
6 Train
should give:
1
1 Car
2 Car
3 Bike
4 Car
5 Train
6 Train
回答1:
Maybe:
>>> df.max(axis=1)
1 Car
2 Car
3 Bike
4 Car
5 Train
6 Train
dtype: object
which is a Series
, not a DataFrame
, but you could make one using df.max(axis=1).to_frame(1)
or something.
回答2:
If they are empty strings rather than NaN you can use .sum:
In [11]: df.fillna('').sum(1)
Out[11]:
1 Car
2 Car
3 Bike
4 Car
5 Train
6 Train
dtype: object
回答3:
This would also work, under the assumption there's always a column with a non empty string:
df.apply(lambda x: [y for y in x.values if y!=''][0],axis=1)
来源:https://stackoverflow.com/questions/22491845/how-to-collapse-pandas-dataframe-columns-and-concatenate-strings