К сожалению, эта первая версия BottomNavigationView имеет множество ограничений. И пока вы не можете удалить заголовки, используя API-интерфейс поддержки. Поэтому, чтобы решить это ограничение, пока Google не реализует его, вы можете сделать (используя отражение):
1. Задайте заголовки пустыми из файла bottom_navigation_menu.xml.
2. Расширяет представление BottomNavigationView:
public class MyBottomNavigationView extends BottomNavigationView {
public MyBottomNavigationView(Context context, AttributeSet attrs) {
super(context, attrs);
centerMenuIcon();
}
private void centerMenuIcon() {
BottomNavigationMenuView menuView = getBottomMenuView();
if (menuView != null) {
for (int i = 0; i < menuView.getChildCount(); i++) {
BottomNavigationItemView menuItemView = (BottomNavigationItemView) menuView.getChildAt(i);
AppCompatImageView icon = (AppCompatImageView) menuItemView.getChildAt(0);
FrameLayout.LayoutParams params = (LayoutParams) icon.getLayoutParams();
params.gravity = Gravity.CENTER;
menuItemView.setShiftingMode(true);
}
}
}
private BottomNavigationMenuView getBottomMenuView() {
Object menuView = null;
try {
Field field = BottomNavigationView.class.getDeclaredField("mMenuView");
field.setAccessible(true);
menuView = field.get(this);
} catch (NoSuchFieldException | IllegalAccessException e) {
e.printStackTrace();
}
return (BottomNavigationMenuView) menuView;
}
}
3. Добавьте к layout.xml этот customView
Для получения дополнительной информации я реализовал это на Github
Вы хотите развернуть свой фрейм данных. Вот один из способов использования pivot_table
:
g = df.groupby('ID').cumcount().add(1)
df.pivot_table(index='ID', columns=g).droplevel(0, axis=1).add_prefix('Phone Number ')
Phone Number 1 Phone Number 2
ID
1 234444.0 989898.0
2 30909.0 NaN
Для версий панд ниже 0,24,0 :
g = df.groupby('ID').cumcount().add(1)
df_ = df.pivot_table(index = 'ID', columns=g)
df_.columns = df_.columns.droplevel(0)
df_.add_prefix('Phone Number ')
Phone Number 1 Phone Number 2
ID
1 234444.0 989898.0
2 30909.0 NaN
импорт панд в виде pd
df = pd.DataFrame([['1','2345'],['1','7890'],['2','1580']], columns = ['ID','Phone Number'])
d2 = df.groupby('ID')
new_df = pd.DataFrame()
for i in range(len(d2)):
new_df = pd.concat([new_df, d2.nth(i).add_suffix(i+1)], axis=1)
new_df = new_df.rename_axis('ID').reset_index()
Вывод:
print(new_df)
ID Phone Number1 Phone Number2
0 1 2345 7890
1 2 1580 NaN
Решения для сводного столбца Phone Number
:
g = df.groupby('ID').cumcount().add(1)
df1 = df.set_index([g, 'ID'])['Phone Number'].unstack().add_prefix('Phone Number ')
print (df1)
ID Phone Number 1 Phone Number 2
1 234444.0 30909.0
2 989898.0 NaN
Или:
df['idx'] = df.groupby('ID').cumcount().add(1)
df1 = df.pivot('idx', 'ID', 'Phone Number').add_prefix('Phone Number ')
print (df1)
ID Phone Number 1 Phone Number 2
idx
1 234444.0 30909.0
2 989898.0 NaN
Или:
s = df.groupby('ID')['Phone Number'].apply(list)
df1 = pd.DataFrame(s.values.tolist(), index=s.index).add_prefix('Phone Number ')
print (df1)
Phone Number 0 Phone Number 1
ID
1 234444 989898.0
2 30909 NaN
Последнее, если требуется индекс для столбца для Решения выше:
df1 = df1.rename_axis(None, axis=1).rename_axis('ID').reset_index()
print (df1)
ID Phone Number 1 Phone Number 2
0 1 234444.0 30909.0
1 2 989898.0 NaN
Решения для нескольких столбцов и необходимо обрабатывать их одинаково:
print (df)
ID Phone Number Name Val
0 1 234444 A 10
1 1 989898 B 4
2 2 30909 C 6
g = df.groupby('ID').cumcount().add(1)
df = df.set_index([g, 'ID']).unstack()
df.columns = [f'{a}{b}' for a, b in df.columns]
df = df.rename_axis('ID').reset_index()
print (df)
ID Phone Number1 Phone Number2 Name1 Name2 Val1 Val2
0 1 234444.0 30909.0 A C 10.0 6.0
1 2 989898.0 NaN B NaN 4.0 NaN
Или:
df1 = df.groupby('ID').agg(list)
comb = [pd.DataFrame(df1[x].values.tolist(), index=df1.index) for x in df1.columns]
df = pd.concat(comb, axis=1, keys=df1.columns)
df.columns = [f'{a}{b}' for a, b in df.columns]
df = df.rename_axis('ID').reset_index()
print (df)
ID Phone Number0 Phone Number1 Name0 Name1 Val0 Val1
0 1 234444 989898.0 A B 10 4.0
1 2 30909 NaN C None 6 NaN