В пандах это не так. Создание некоторых фиктивных фреймов данных:
>>> import pandas as pd
>>> e10_all = pd.DataFrame({"A": [1,2], "B": [2,3], "C": [2,3]})
>>> e11_all = pd.DataFrame({"B": [4,5], "C": [5,6]})
>>> e12_all = pd.DataFrame({"B": [1,2], "C": [3,4], "M": [8,9]})
Затем ваш код переводится на что-то вроде
>>> list_df = [e10_all, e11_all, e12_all]
>>> col_common = set.intersection(*(set(df.columns) for df in list_df))
>>> col_common
{'C', 'B'}
>>> ','.join(sorted(col_common))
'B,C'
. Вторая строка превращает каждый из столбцов фреймов в набор, а затем берет пересечение всех из них. Более буквальный перевод вашего кода тоже будет работать, хотя мы склонны избегать написания циклов, где мы можем его избежать, и мы склонны напрямую перебирать элементы (for df in list_df[1:]:
) вместо перехода через индекс. Тем не менее,
col_common = set(list_df[0].columns)
for i in range(1, len(list_df)):
col_common = col_common.intersection(list_df[i].columns)
выполнит эту работу.
Я наконец понял это; в случае, если кто-то пытается добиться того же самого, у вас есть две возможности:
docker exec -it <container name> /bin/bash
и перейдите в папку, на которой вы хотите использовать Composer. и запустите команды composer. Также может быть полезно отметить, что docker-compose run <container name> ls
покажет подключенные тома контейнера (если вы хотите проверить / убедиться). #!/bin/bash
mkdir ~/.functions
echo '#!/bin/bash
tty=
tty -s && tty=--tty
docker run \
$tty \
--interactive \
--rm \
--user $(id -u):$(id -g) \
--workdir /var/www/html/${PWD##*/} \
--volume /etc/passwd:/etc/passwd:ro \
--volume /etc/group:/etc/group:ro \
--volume $(pwd):/var/www/html/${PWD##*/} \
composer "$@"' > ~/.functions/composer
echo 'alias composer="sh ~/.functions/composer"' >> ~/.bash_profile
source ~/.bash_profile
Затем в терминале попробуйте composer version
, чтобы увидеть, работает ли он, если нет, попробуйте выполнить source ~/.bash_profile
еще раз, и повторите попытку .
Надеюсь, это поможет!