#python #pandas #series
#python #панды #Серии
Вопрос:
Как мне умножить ряд на tuple
и каждое значение в серии будет умножаться на каждое значение в tuple
.
Я пишу пример кода, чтобы показать вам пример ожидаемых результатов:
import numpy as np
import pandas as pd
def main():
s = pd.Series(data=np.around(a=np.random.uniform(size=10), decimals=3))
t = (2, 3, 5, 7)
print(s)
if __name__ == '__main__':
main()
Мой вывод:
0 0.709
1 0.567
2 0.894
3 0.660
4 0.348
5 0.465
6 0.974
7 0.832
8 0.888
9 0.265
dtype: float64
Мне нужно получить этот результат:
0 (1.418, 2.127, 3.545, 4.963)
1 (1.134, 1.701, 2.835, 3.969)
2 (..., ..., ..., ...)
3 (..., ..., ..., ...)
4 (..., ..., ..., ...)
5 (..., ..., ..., ...)
6 (..., ..., ..., ...)
7 (..., ..., ..., ...)
8 (..., ..., ..., ...)
9 (..., ..., ..., ...)
dtype: float64
Ответ №1:
Попробуйте
import numpy as np
import pandas as pd
def main():
s = pd.DataFrame(data=np.around(a=np.random.uniform(size=10), decimals=3))
t = (2, 3, 5, 7)
s[0] = s[0].apply(lambda x: tuple([(x * y) for y in t]))
print(s)
if __name__ == '__main__':
main()
вывод
0 (1.168, 1.7519999999999998, 2.92, 4.088)
1 (1.332, 1.9980000000000002, 3.33, 4.662)
2 (1.254, 1.881, 3.135, 4.389)
3 (1.372, 2.0580000000000003, 3.43, 4.8020000000...
4 (0.846, 1.269, 2.1149999999999998, 2.961)
5 (0.386, 0.579, 0.9650000000000001, 1.351)
6 (1.528, 2.292, 3.8200000000000003, 5.348)
7 (0.64, 0.96, 1.6, 2.24)
8 (1.75, 2.625, 4.375, 6.125)
9 (1.234, 1.851, 3.085, 4.319)
Ответ №2:
Вы можете попробовать:
>>> s.apply(lambda x: tuple(x*np.array(t)))
Чтобы избежать понимания списка и циклов
Ответ №3:
s = pd.Series(data=np.around(a=np.random.uniform(size=10), decimals=3))
t = (2, 3, 5, 7)
s = pd.Series([i for i in zip(*[s*i for i in t])])
s
Вывод:
0 (1.162, 1.7429999999999999, 2.905, 4.067)
1 (1.746, 2.6189999999999998, 4.365, 6.111)
2 (0.516, 0.774, 1.29, 1.806)
3 (1.68, 2.52, 4.2, 5.88)
4 (1.048, 1.572, 2.62, 3.668)
5 (0.412, 0.618, 1.03, 1.442)
6 (1.426, 2.139, 3.565, 4.991)
7 (1.162, 1.7429999999999999, 2.905, 4.067)
8 (0.652, 0.978, 1.6300000000000001, 2.282)
9 (0.446, 0.669, 1.115, 1.561)
dtype: object
Ответ №4:
Преобразование кортежа в массив NumPy упрощает вашу работу. Он просто умножает весь массив на элемент, присутствующий в ряду, а затем u может снова преобразовать массив NumPy в кортеж. Хотя многократное преобразование неэффективно, при работе с кортежами большего размера использование массива numpy является преимуществом. Если кортеж не обязательно должен присутствовать в ряду, хорошей практикой является работа с массивами NumPy. Приведенный ниже код выполняет эту работу.
import pandas as pd
import numpy as np
s = pd.Series(data=np.around(a=np.random.uniform(size=10), decimals=3))
t = np.array((2, 3, 5, 7))
s=pd.Series([tuple(x*t) for x in s]).
Ответ №5:
Вероятно, вы захотите использовать фрейм данных pandas для работы с «2-мерными» данными. Вы можете попробовать следующее:
import pandas as pd
import numpy as np
s = pd.Series(data=np.around(a=np.random.uniform(size=10), decimals=3))
t = (2, 3, 5, 7)
df = pd.DataFrame()
for i, value in enumerate(t):
col = i
df[col] = s * value
print(df)
Этот код выводит:
0 1 2 3
0 1.640 2.460 4.100 5.740
1 1.544 2.316 3.860 5.404
2 1.556 2.334 3.890 5.446
3 0.710 1.065 1.775 2.485
4 1.816 2.724 4.540 6.356
5 0.778 1.167 1.945 2.723
6 0.628 0.942 1.570 2.198
7 0.800 1.200 2.000 2.800
8 0.538 0.807 1.345 1.883
9 1.520 2.280 3.800 5.320